KMP
前缀表是 以首字符开头的所有子串 最长相等前后缀数的集合
前缀表示以首字符开头 不包含最后字符的字串,比如
a没有前缀
ab的前缀是a
aba的前缀是a,ab
后缀表示以末字符结尾 不包含首字符的字串,比如
a没有后缀
ab的后缀是b
aba的后缀是a,ba
所以要计算一个字符串的前缀表,又称为next数组,要找到以首字符开头的所有字串,计算每个子串的最长相等前后缀的长度 然后整体组合起来就是字符串的前缀表
比如ABABAB
以首字符开头的所有字串,对应的前缀和后缀,以及最长的相等前后缀的长度分别是
A 无 无 0
AB A B 0
ABA A,AB A,BA 1 (A)
ABAB A,AB,ABA B,AB,BAB 2 (AB)
ABABA A,AB,ABA,ABAB A,BA,ABA,BABA 3 (ABA)
ABABAB A,AB,ABA,ABAB,ABABA B,AB,BAB,ABAB,BABAB 4 (ABAB)
所以ABABAB这个字符串的前缀表就是0,0,1,2,3,4