推荐先在B站搜索KMP看一个印度小哥讲解的视频:
首先简介kmp算法:
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。
实现的关键点:
首先构造next辅助数组,假如说pattern串是aaba,那么pattern数组的内容便是{0, 1, 0, 1},这里面0代表从pattern头部到该位置的子字符串的没有公共前缀和后缀,1代表从pattern头部到该位置的子串的公共前缀和后缀的长度为1...。
其次遍历主字符串,对于任意一位字符