kmp算法主要是减少字符串查找过程中的回退,尽可能减少不用的操作,算法复杂度是O(n+m)。思想可以使用与ac自动机。主要是先求next数组。比如当next[i] = j。也就是说0 ~ j-1所在的字符串跟i-j 到 i-1 所在的字符串是相同的。其他的原理基本一样

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。
KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n
KMP算法中的next数组表示模式串中前缀和后缀的最长公共部分长度。因此,我们需要先从模式串中生成next数组,具体求法如下:
2. 设置两个指针i和j,初始时i=2,j=0;
③ 如果p[j]!=p[i-1],则将指针j移动到next[j]的位置,循环比较p[j]和p[i-1]的值,直到符合①或②两种情况为止。
其中n为模式串的长度。
例如,对于模式串"ABCDABD",生成的next数组为[-1,0,0,0,0,1,2]。
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。
KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。