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

posted @ 2012-10-30 23:42  xxx's blog  阅读(143)  评论(0编辑  收藏  举报