对于字符串(S)的前(i)个字符构成的子串,既是它的后缀又是它的前缀的字符串中,它本身除外,最长的长度记作 (next[i])
真是精炼的定义
char s[maxn];int n;
int fail[maxn];
char t[maxn];int m;
int fnd[maxn];
void getfail(){
fail[1]=0;
for(int i=2,j=0;i<=n;i++){
while(j && s[i]!=s[j+1])j=f[j];
if(s[j+1]==s[i])j++;
f[i]=j;
}
}
int find(){
for(int i=1,j=0;i<=m;i++){
while(j && (j==n || s[i]!=s[j+1]))j=fail[j];
if(t[i]==s[j+1])j++;
fnd[i]=j;
}
}
具体做法参考了这里