1,此文先求解next数组
这里先从直观上来理解,即考虑模式串P的“各个子串的前缀后缀的公共元素的最大长度”容易得到,然后通过右移“各个子串的前缀后缀的公共元素的最大长度”数组,然后p0补-1得到next数组。
之后通过代码求解next数组的各个元素的值。
这里需要弄明白为什么需要递归,为什么可以递归求解?
递归通过关键代码
<span style="font-size:14px;">k=next[k]</span>
实现。因为我们不希望用最笨、最原始、浪费时间、浪费感情的回溯法来进行模式串和目标串的匹配,所以用到了next数组来帮助我们找到一个合适的、合理的、恰当的目标串的相同前缀后缀位置,这就是next数组存在的意义。

本文详细探讨了KMP算法的理解,从next数组的构造出发,解释了递归求解next数组的原因,并针对p[j]==p[next[j]]的情况进行了优化,以提高匹配效率。此外,还提及了KMP算法的时间复杂度分析以及与其他如BM算法的比较。
最低0.47元/天 解锁文章
8171

被折叠的 条评论
为什么被折叠?



