- 注册时间
- 2004-10-13
- 最后登录
- 1970-1-1
|
里面一章说的 模式匹配的改进算法
给出的例子是这样的
j | 1 2 3 4 5 6 7 8
模式 | a b a a b c a c
next[j] | 0 1 1 2 2 3 1 2
next[1] 是先赋0值的.
之后给出了求 next值的函数
如下所示;- void get_next(SString T,int &next[])
- {
- //求模式串T的next函数值并存入数组next
- i = 1; next[1] = 0; j = 0;
- while(i<T[0]) //T[0]这里应该是指串T的长度
- {
- if(j==0 || T[i] == T[j])
- {
- ++i;++j;
- next[i] = j;
- }
- else
- j = next[j];
- }
- }
复制代码
不过按这个算法,得到的 next[j]的值, 到了 next[4] 就不对了,
按上面的例子到了 next[4] 应该是等于 2 ,但按这算法是等于1
请问这是怎么回事呢? |
|