kmp(不含讲解)

来源:互联网 发布:环保大数据平台 编辑:程序博客网 时间:2024/04/28 15:41

next 要注意:

数组是从0到i-1的而不是1到i;

所以next[i]其实是0到i-1的前缀和后缀相同的最大个数

如此的话但长度为1的时候其实是没有意义的,所以一般设next[0]=-1;

void getnext(int str[],int next[],int len){int i=0;int j=-1;next[0]=-1;while(i<len){if(j==-1||str[i]==str[j]){i++;j++;next[i]=j;}else{j=next[j];}}}


当满足if(i%(i-next[i])==0&&next[i]!=0)

有循环节

循环节长度为:i - next[i]


循环次数为:i / ( i - next[i] )

原创粉丝点击