扩展kmp

求整个串和每个后缀的最长公共前缀,复杂度线性。代码如下:

for(int i=2;i<=cnt;i++){
	if(p+z[p]>i)z[i]=min(z[i-p+1],p+z[p]-i);
	while(c[z[i]+1]==c[i+z[i]])z[i]++;
	if(i+z[i]>p+z[p])p=i;
}
posted @ 2023-03-29 21:10  FeynZc  阅读(22)  评论(0)    收藏  举报