一.前言
笔者经过学习并对KMP算法思考理解,想在本文与各位大佬萌新进行讨论,也算是笔者对这一算法学习的总结,供大家参考,并可以对更简单的理解给予我私信,共同进步。
本文从三个方面对KMP算法进行讨论
1.从BF算法引入KMP
2.next数组的含义
3.求解next数组
二.正文
2.1从BF算法引入KMP
BF算法就是我们说的暴力匹配,我们知道主串中包含了很多个与我们要找的模式串长度相同的子串,所以暴力匹配算法相当于把这些子串都和模式串compare了一次,但是我们在真实的比较过程中不是把所有子串找出来,而是移动指针比较,如图:
我们现在就可以移动P1和P2指针进行比较,当P1和P2相等时,继续向后比较,如果不等那么我们需要把模式串向后移动一位,继续前面的操作如图:
当指针指向P1和P2所示,表示不满足,此时我们认为这个A开头的子串不可能匹配了,就把模式串移动到B开头的子串进行比较,为了方便我后面图把主串令为S1,模式串为S2:
所以只需将模式串按照上面步骤依次比较,直到找到我们想要匹配的子串为止,当满足以下两个条件时结束:
1.当P2等于斜杠0了,证明找到了(有些教材用的是字符串的长度判定)
2.当 P1等于斜杠0,证明找不到
但是细心的朋友比较上面两个图发现,当我重新从B进行比较的时候,P1回到了B的位置,P2回到了A的位置,我们把这个称作指针回溯,每一次都要重新把主串回溯到上一次比较的下一个位置&#