kmp算法
就是有关字符串匹配的一种简便算法。
难点就是对子串(比较串)return[]数组的计算。
s为主串,t为字串,i为主串比较的第i位,j为子串比较的第j位
比较串(子串)return数组的计算方法
一开始,我很摸不着头脑,对这个式子。
例子:abaabcac
头两位必然是0和1;则有
a b a a b c a c
0 1 ? ? ? ? ? ?
然后对第三位进行分析
因为前两位是ab,a!=b,则return[3]=0+1=1
a b a a b c a c
0 1 1 ? ? ? ? ?
第四位
前三位是aba,a==a,(只有一个字符相同)则return[4]=1+1=2
a b a a b c a c
0 1 1 2 ? ? ? ?
第五位
前四位是abaa,a==a,(只有一个字符相同)则return[5]=1+1=2;
a b a a b c a c
0 1 1 2 2 ? ? ?
第六位
前五位是abaab,ab=ab,(有两个字符相同)则return[6]=2+1=3;
a b a a b c a c
0 1 1 2 2 3 ? ?
第七位
前六位是abaabc,a!=c,return[7]=0+1=1
a b a a b c a c
0 1 1 2 2 3 1 ?
前八位是abaabca,a==a,return[8]=1+1=2
a b a a b c a c
0 1 1 2 2 3 1 2
所以字串的return数组就是0 1 1 2 2 3 1 2。
参考了许多,如侵权就删。
next[j]表示的是对比字符串的下一个对比位置。
有视频:https://www.bilibili.com/video/av39191654?from=search&seid=17016927365116145147