KMP算法的作用:给定字符串s1,字符串s2,判断s1中是否包含字符串s2。
具体实现,可以观看卡神的视频:KMP算法原理
前缀表next
前缀表的作用,就是在匹配字符串的过程中,如果遇到不相匹配的,需要改变的偏移量,其计算过程是利用了最长相同前后缀。
为什么是最长相同前后缀?
如下图,当我们匹配到f
的时候,如果不相等,最好的做法是与b
来进行匹配,为什么呢? 因为这里有一个f的后缀aaf
(实际上不带f
),和一个前缀aa
,这两是相同的,因此要找最长相同前后缀。
求next数组的代码:
vector<int> kmp_getNext(string s){
vector<int> next(s.size()