在模拟 KMP 匹配过程之前,我们先建立两个概念:
- 前缀:对于字符串 abcxxxxefg,我们称 abc 属于 abcxxxxefg 的某个前缀。
- 后缀:对于字符串 abcxxxxefg,我们称 efg 属于 abcxxxxefg 的某个后缀。
后缀就是相当于这个字符串减去第一个字符剩下的字符串。
前缀就是相当于这个字符串减去最后一个字符剩下的字符串。
next数组的值
储存从位置0开始到当前位置的字符串的前后缀的最长相等前后缀
举个例子:
- 字符串
a
没有前后缀,值为0. - 字符串
aa
的前缀只有a,后缀只有a,值为1. - 字符串
aab
的前缀有a,aa,后缀有a,ab,最长相等前后缀值为1,但在b的位置没有,a,a
这一对是属于aa
字符串的,也就是下标为1的时候,所以这个的next数组为next=[0,1,0]
aaa,下标为2的时候值当然是2
aaab,下表为3的时候值是0.