Always keep a|

luckydrawbox

园龄:4个月粉丝:1关注:2

扩展 KMP(Z 函数)

变量

  • int z[i]\texttt{int z[i]}SinS_{i\sim n}SS 的最长公共前缀的长度。

函数

  • void getz(string s)\texttt{void getz(string s)}:得到字符串 sszz 函数值。

代码

int z[N];
void getz(string s){
	int len=s.size(),l=0;
    z[0]=0;
	for(int i=1;i<len;i++){
		z[i]=0;
		if(l+z[l]>i)
			z[i]=min(l+z[l]-i,z[i-l]);
		while(i+z[i]<len&&s[z[i]]==s[i+z[i]])
			z[i]++;
		if(i+z[i]>l+z[l])
			l=i;
	}
	z[0]=len; 
}

本文作者:luckydrawbox

本文链接:https://www.cnblogs.com/luckydrawbox/p/18526498

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   luckydrawbox  阅读(2)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起