KMP算法:
常规想法:
一个个匹配 时间复杂度太高
总结: 我们发现 每次匹配前面的并没有给后面一些指导信息
Note: 子串 和子序列不一样 前者是连续的 后者可以是不连续的 注意区分
详细解释如下:
KMP算法思路:
1 现根据match生成最大前后缀匹配长度数组 :
2 从str[i]字符出发---匹配到j位置上发现开始出现不匹配:
3 下一次match 数组往右滑动, 滑动大小为match当前字符的最大前后缀匹配长度,再让str[j]与match[k]进行下一次匹配~
4 注意为什么加快,主要是str[i]--c前那段不用考虑,因为肯定不能匹配~
若有匹配 则出现更大的前后缀匹配长度 ,与最初nextArr[] 定义违背。
代码:
关于nextArr数组的求解:
代码: