快退化到连KMP都不会了,重写个KMP复习下
int next[MAXN],F[MAXN],S[MAXN];
void get_next(int *s,int l)
{
int i,j;
memset(next,0,sizeof(next));
i=-1;next[0]=-1;j=-1;
for(i=1;i<=l-1;i++)
{
while(s[j+1]!=s[i]&&j!=-1) j=next[j];
if (s[j+1]==s[i]) j++;
next[i]=j;
}
}
int KMP(int *F,int lf,int *S,int ls,int *next)//父串,子串,next
{
int i,j;
j=-1;
for(i=0;i<lf;i++)
{
while(F[i]!=S[j+1]&&j!=-1) j=next[j];
if (F[i]==S[j+1]) j++;
if (j==ls-1)
return i-j;
}
return -1;
}