【NOI2014】动物园 kmp性质

对于字符串(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;
	}
}

具体做法参考了这里

原文地址:https://www.cnblogs.com/Drenight/p/9291067.html