代码
- 获得部分匹配值表
next[j-1]详解
- i=8 与 j=5对应字母不同,即这串字母的第3到第8个与第0个到第5个不同,但是第3到第7个与第0到第4个相同
- 此时,要寻找的是第3到第7个这串数字中是否存在前后缀,如第3个和第7个相等,这样就可以直接验证第4个和第8个是否相等
- 因为第3到第7跟第0到第4相同,所以等同于验证第0到第4
- 此时j-1回到第4个数字,发现数组记录值(next(j-1))为2,即当前第3到第4跟第0到第1相等
- 等价于第6到第7个跟第0到第1个相等
- 所以此时验证第8个是否等于第2个
(逻辑上第3个,但是数组下标是2,数组记录的是之前相同的个数,所以下一个的下标值会刚好等于相同的个数,即j(下标值) =next(j-1)(相同个数)) - 很遗憾第8个不等于第2个,即0,1,2不会等于6,7,8,需要重复上述1到6点
- 可归结为在第0个和1个中寻找是否有后缀(此时j=2->j=next(j-1)=1)
- 发现有,即此时第7个会等于第0个(后缀的后缀等于前缀的前缀)
- 验证第1个是否等于第8个,答案是相等,此时j++,数组填入2