今天又看了一遍KMP算法,恰好翻到自己之前写的笔记,果然还是自己的笔记更好懂。po在这里,如果也能帮到别人的话,就更好啦~有理解的不对的地方请批评指正
KMP算法的一点理解
好马不吃回头草,主串i值不回溯,子串j值回溯至next(j)
- PMT中的值是字符串的前缀集合与后缀集合的交集中最长元素的长度。
- List item
- 主字符串在 i 位失配,也就意味着主字符串从 i−j 到 i 这一段是与模式字符串的 0 到 j 这一段是完全相同的。主字符串中 i 指针之前的 PMT[j −1] 位就一定与模式字符串的第 0 位至第 PMT[j−1] 位是相同的。
- 这样一来,我们就可以将这些字符段的比较省略掉。具体的做法是,保持i指针不动,然后将j指针指向模式字符串的PMT[j −1]位即可。
- 求next数组的过程完全可以看成字符串匹配的过程,即以模式字符串为主字符串,以模式字符串的前缀为目标字符串,一旦字符串匹配成功,那么当前的