http://www.cnblogs.com/zhy2002/archive/2008/03/31/1131794.html
文章阅读过了。
原理基本看明白,但的确自己折腾一上午没弄出来。博客中代码是对的。对于Next数组的求解似乎没想明白。请走过路过的朋友不要错过,给点指点,越详细越好。可以用那个博客中的代码附加你的注释,或是自己实现的附加注释。
如果能用for实现则更好了。
文章阅读过了。
原理基本看明白,但的确自己折腾一上午没弄出来。博客中代码是对的。对于Next数组的求解似乎没想明白。请走过路过的朋友不要错过,给点指点,越详细越好。可以用那个博客中的代码附加你的注释,或是自己实现的附加注释。
如果能用for实现则更好了。
void get_next(SString T,int next[])
{
i=1; next[1]=0; j=0;
while(i<T[0])
{
if(j==0 || T[i] == T[j])
{
++i;
++j;
next[i] = j;
}
else
{
j = next[j];
}
}
}这里的i表示当前查找的位置。j是滑动的位置。
如果T字符串为:abaabc
结果明白,但实在没想明白这个精巧的设计怎么解释。
KMP 最经典的地方就是对一直条件的充分利用。
严蔚敏