KMP算法
KMP算法的思想是
主串S 和模式串W,判断W是否匹配S
如果主串S在i位置与W串在j位置出现不匹配的情况的时候,利用已经得到的匹配把W串尽量右移动一段距离。
用伪代码写,如下:
int kmp(string S, string W){
while(i<S.length){
if(S[i]==W[j]) {
if(j==W.length-1) return i-j;
i++; j++;
} else {
if(next[j]>-1){
j=next[j];
} else {
i=i-j+1;
j=0;
}
}
这里我们一般记next[0]=-1;
next[1]=0
当j>=2时,
找到最大的k,使得
W[0]~W[k-1] == W[j-k]~W[j-1],
然后赋值next[j]=k