z_algorithm

//对于字符串a的每个后缀,匹配它与a的第一个后缀的最长公共前缀,复杂度线性
void
z_algorithm(char *a,int len) { z[0]=len; for(int i=1,j=1,k;i<len;i=k) { if(j<i)j=i; while(j<len && a[j]==a[j-i])++j; z[i]=j-i; k=i+1; while(k+z[k-i]<j)z[k]=z[k-i],++k; } }

 

posted @ 2018-10-15 11:22  mxzf0213  阅读(294)  评论(0编辑  收藏  举报