什么是KMP
三位学者发明的:Knuth,Morris和Pratt算法
KMP有什么用
KMP主要应用在字符串匹配上。
KMP的主要思想是「当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头开始再去做匹配了。」
那么如何记录已经匹配的文本内容,是KMP的重点,也是next数组肩负的重任。
前缀表
next数组就是一个前缀表(prefix table)。
前缀表有什么作用呢?
「前缀表是用来回溯的,意味着在某个字符失配时,前缀表会告诉你下一步匹配中,模式串应该跳到哪个位置。
所以前缀表记录的是模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配的位置。」
为了清楚的了解前缀表的来历,我们来举一个例子:
要在文本串:aabaabaafa中查找是否出现过一个模式串:aabaaf。
可以看出,文本串中第六个字符b 和 模式串的第六个字符f&