http://blog.fishc.com/2297.html
让编程改变世界
Change the world by program
KMP算法之NEXT数组代码原理分析
NEXT数组:当模式匹配串T失配的时候,NEXT数组对应的元素指导应该用T串的哪个元素进行下一轮的匹配。
i(后缀)= 1 2 。3 4 5 6 7 。8 9
j(前缀)= 0 1 0 1 2 3 4 2 1 2 3
以上i和j的标号缺少部分,下面是转移至以0结尾的字符串
a b a b a a a b a
i(后缀)= 0 1 。 2 3 4 5 。。 6 。 7 8
j (前缀) = -1 0 -1 0 1 2 3 1 0 1 0 1 2
void getNext()
{
memset(next,0,sizeof(next));
int i,j;//i表示后缀,j表示前缀
i=0;
j=-1;
next[0]=-1;
while(i<strlen(T)-1)
{
if(j==-1||T[i]==T[j])
{
i++;j++;
next[i]=j;//此时i指向下一个编号
}
else
{
j=next[j];//前缀回溯,只有前缀能够回溯 后缀i无法回溯
}
}
}
详细分析请看视频讲解~