首先是求next数组
void get_next(char* T,int *next){
int i,j;
i=1;
j=0;
next[1]=0;
while (i<T[0]) {
if (j==0 || T[i]==T[j]) {
i++;
j++;
next[i]=j;
}else{
j=next[j];
}
}
}
KMP实现函数
int Index_KMP(char* S,char* T,int pos){
int i=pos;
int j=1;
int next[255];
get_next(T, next);
while (i<=S[0] && j<=T[0]) {
if (j==0 || S[i]==T[j]) {
i++;
j++;
}else{
j=next[j];
}
}
if (j>T[0]) {
return i-T[0];
}else{
return 0;
}
}
对KMP算法的改进,求nextVal数组
就可以进行改进了