00 写在前面
KMP在字符串匹配中是一个很好用的方法,也有很多题目直接考察KMP算法。
这次我们来了解一下KMP算法的代码求解过程。(建议先阅读相关资料了解KMP的手算思路)
01 KMP概述
KMP算法主要用在字符串匹配上。比如查找一个串中是否出现另一个串。
暴力解法就是进行遍历,当不匹配时继续重头再来。而KMP可以记录之前已经匹配过的文本信息,防止出现重复匹配的现象。
了解过KMP算法的小伙伴也知道,KMP最重要的就是求next数组,next数组也可以看作匹配时的信息数组,根据next数组给出的信息可以很好的进行匹配的跳跃。
02 next数组
next数组其实是一个前缀表。严格来说它记录了主串和匹配串不匹配时,匹配串要回到哪里开始重新匹配。
而next数组的核心,就是记录下标i包括i之前的字符串中右多长的相同前缀后缀。
相同前缀后缀这点应该很好理解。
比如a的最长相同前缀后缀就是0,aba的最长相同前缀后缀是1,ababa的最长相同前缀后缀是3。
03 匹配过程
前缀表非常的神奇,这个思想在求next数组和匹配过程中都会用到。
举个例子:主串是aabaabaaf,匹配串是aabaaf
当遇到不匹配的位置