void getnext(){
next[0]=-1;
int k=-1;
int j=0;
int len=strlen(s2);
while(j<len){
if(k==-1||s2[k]==s2[j]){
j++;
k++;
next[j]=k;
}
else k=next[k];
}
}
int kmp(){
int cnt=0;
int i=0,j=0;
int len1=strlen(s1);
int len2=strlen(s2);
while(i<len1){
if(j==-1||s1[i]==s2[j]){
i++;
j++;
}
else j=next[j];
if(j==len2){
cnt++;
j=0;
}
}
return cnt;
}
另外 next[ ]数组可以用于计算最小循环节
最小循环节=len-next [ len];