KMP算法:
主串指针不回溯,模式串指针回溯。
next数组和模式串对应
int Index_KMP(SString S,SString T,int next[]){
int i=1,j=1;
while(i<S.length&&j<=T.length){
if(j==0||S.ch[i]==T.ch[j]){
i++;
j++;
}
else
j=next[j]; //模式串向右移动
}
if(j>T.length)
return i-T.length;
else
return 0;
}
求nextval数组:(KMP算法优化)
先求next数组,再令nextval[1]=0
for(int j=2;j<=T.length;j++){
if(T.ch[next[j]]==T.ch[j])
nextval[j]=nextval[next[j]];
else
nextval[j]=next[j];
}
一般求next数组为手算,不再赘述。