1、求next[]数组

kmp.png
假如条件不成立,就往前找 j=next[j]

kmp2.png

next数组求解总结:next【j】的值每次最多+1,模式串的最后一位不影响结果。
次大值为next【next【j】】+1.

2、算法具体实现

kmp3.png
int Index_KMP(String S, String T){
int i=1, j=1;
int next[255]; //定义next数组
get_next(T, next); //得到next数组
while(i<=S.length && j<=T.length){
if(j==0 || S.ch[i] == T.ch[j]){ //字符相等则继续
++i; ++j;
}else{
j = next[j]; //模式串向右移动,i不变
}
}
if(j>T.length){
return i-T.length; //匹配成功
}else{
return 0;
}
}