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 &