目录
KMP 算法理解
参考 :
https://blog.csdn.net/starstar1992/article/details/54913261/
https://segmentfault.com/a/1190000008575379
关于 next 数组 :可以参考(我自己写的) https://blog.csdn.net/x_xx_xxx_xxxx/article/details/83898805
1. 起源:
KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。其中第一位就是《计算机程序设计艺术》的作者。
如你所见, KMP 是 三位发现者的 首字母大写缩写。K -- Knuth、M -- Morris 、P -- Pratt。
2. 算法理解
2.1 要点
1 主串遍历不回溯
2 模式串匹配兼回溯
2.2 算法核心思想
2.2.1 主串遍历
主要 利用已经部分匹配这个有效信息 ,保持主串指针i不回溯,通过修改模式串指针j,让模式串尽量地移动到有效的位置 。
即可以提前分析子串(即匹配的模式串,下称子串,不再重复注释),设计出一个匹配到当前子串回溯的长度(主串指针不动)。简易理解:
即 :
(第一步 :)主串指针 i 前方的 j 个字符和子串前 j 个字符相同 ,则 i = i++; j = j++ ; 比较下一个字符串,
(第二步:)如果不相同, i 不变, j 重新赋值,继续进行 第一步的匹配。
这时,问题变成了,子串如何回溯的问题。 此部分代码可以如下表示: