简述
KMP算法:由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,串匹配算法,一般串都是指字符串。KMP是基于双指针算法的
应用:一个字符串在另外一个字符串中出现的位置和 循环节
一般地,被匹配的字符串叫主串,用来匹配主串的叫模式串
如果我们不用KMP,来查找一个字符串在另外一个字符串中第一次出现的位置,暴力求解时间复杂度是O(NM),用KMP优化时间复杂度是O(M+N),但是空间复杂度是O(M)。M和N分别是模式串和字串的大小。
KMP讲解
我觉得MOOC浙江大学数据结构讲的很不错,附上链接第十二章最后一节KMP算法.
对于刷题,还是思路清晰了,代码简洁为好,下面附上两个模板。
附带leetcode相关使用KMP算法的题:28. 实现 strStr()
KMP算法模板1(主串和模式串以0开始存储)
//ne数组
int ne[m];
ne[0] = -1;
for (int i = 1 ; i < m ; i++){
int j = ne[i - 1];
while ( j > -1