KMP是一个用于字符串匹配的算法,用于求解串str2是否在串str1中出现并返回出现的位置(str1的长度>=str2的长度)
由于<cstring>里内置的子串查找函数时间复杂度太高(BF算法时间复杂度O(n*m)),所以数据过大时得手写kmp(O(n+m))
先理清楚2个概念
1.前缀和后缀
这是百度百科的解释
汉语里指在词根前面的构词成分。如“阿哥”、“阿姨”中的“阿”,英文中指一个英语单词可以分为三个部分:前缀(prefix),词根(stem)及后缀(suffix)。单词中位于词根前面的部分就是前缀。前缀,可以改变单词的意思。
引申到串里,如果串的长度为leng ,那这个串的前缀就可以是从str[0]到str[leng-1]中的任何一组
比如说一个串abcdef 那么它的前缀和后缀可以是下面几种情况
前缀 后缀
abcde bcdef
abcd cdef
abc def
ab ef
a f
2.next数组
&nb