我正在建立两个2-D矩阵,用于存储某个字符在某个字符之前和之后发生的次数。基本上,我正在制作一个后缀数组和一个前缀数组。为此,我编写了这段代码
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
long long t,i,j,k,n;
long long x,y,count;
scanf("%lld",&t);
char s[100000];
while(t--){
y=0,count=0;
scanf("%s",s);
n=strlen(s);
char suf[n][26];
int columns=26;
char pref[n][26];
memset(pref, 0, sizeof(pref[0][0]) * n * columns);
memset(suf, 0, sizeof(suf[0][0]) * n * columns);
for(i=0;i<26;i++)
suf[n-1][i]=0;
for(i=n-1;i>0;i--)
for(j=0;j<26;j++){
if(j==s[i]-97)
suf[i-1][j]=suf[i][j]+1;
else
suf[i-1][j]=suf[i][j];
}
for(i=0;i<26;i++)
pref[0][i]=0;
for(i=0;i<n;i++)
for(j=0;j<26;j++)
{
if(j==s[i]-97)
pref[i+1][j]=pref[i][j]+1;
else
pref[i+1][j]=pref[i][j];
}
好的。因此,这使我后缀数组的第一行不正确。另一方面,如果我尝试在制作前缀矩阵之后构建后缀矩阵,则可以解决问题。我只是想知道为什么即使在构建后没有接触后缀矩阵的情况下也会发生这种情况。