KMP算法的基本思想:每一趟匹配完成后,利用上一趟匹配的结果,将模式向右滑动尽可能远的一段距离。
宗旨:i指针在整个匹配过程是没有回溯。
当主串中的第i个字符与模式中第j个字符失配时,主串中第i个字符(i指针不回溯)应与模式中哪个个字符再比较?假设此时对应于模式中第K(k<j)哪个字符继续比较。则模式中前k-1个字符的子串必须满足下列关系式:(4-2)
j为模式串当前不匹配处。
k为模式串下一趟与主串i处比较的位置。
(4-4)则是我们希望得到结果:由子串的特征,我们就可以得到子串下一趟应与主串对比的position 。
如何计算next[j]:
next[j]只与模式串有关,与主串无关
字串与主串的失配处下一次比较在字串的next[j]位置