KMP算法:


常规想法:
一个个匹配 时间复杂度太高

总结: 我们发现 每次匹配前面的并没有给后面一些指导信息
Note: 子串 和子序列不一样 前者是连续的 后者可以是不连续的 注意区分
详细解释如下:

KMP算法思路:
1 现根据match生成最大前后缀匹配长度数组 :

2 从str[i]字符出发---匹配到j位置上发现开始出现不匹配:

3 下一次match 数组往右滑动, 滑动大小为match当前字符的最大前后缀匹配长度,再让str[j]与match[k]进行下一次匹配~


4 注意为什么加快,主要是str[i]--c前那段不用考虑,因为肯定不能匹配~
若有匹配 则出现更大的前后缀匹配长度 ,与最初nextArr[] 定义违背。

代码:

关于nextArr数组的求解:



代码:

讨论计算复杂度:

相关题目:
1 .给定一个字符串 如何加最短的字符(只能在原始串的后面进行添加)使其构成一个长的字符串且包含两个原始字符串~
思路:其实就是最大前后缀长度数组~ e.g. abcabc ---->abcabcabc 最少增加3个

多求一位nextArr &

本文深入探讨了KMP算法的原理,包括如何构建最大前后缀匹配长度数组,并通过实例展示了如何利用KMP算法解决字符串匹配问题。同时,提到了KMP算法在字符串重复、子树判断等场景的应用,并简要提及了Manacher算法和BFPRT算法。
最低0.47元/天 解锁文章
337





