1 KMP 串的模式匹配算法
1.如何求next数组(abaabcac,只需考虑模式串)
1、求maxL数组(即字串前缀和后缀相同的长度)
1 2 3 4 5 6 7 8 模式串 a b a a b c a c 字串 a ab aba abaa abaab abaabc abaabca abaabcac maxL 0 0 1 1 2 0 1 0 2、将maxL数组后移一位,第一位设为-1,丢弃末位,每位+1得到next数组
maxL 0 0 1 1 2 0 1 0 maxL' -1 0 0 1 1 2 0 1 next 0 1 1 2 2 3 1 2
2.如何求nextval数组
1、比较maxL数组和next数组每一位,第一位填0
(1)若不相等,填入对应next值
(2)若相等,填入对应序号为next的nextval值,即nextval[next](注意这里下标从1开始)
maxL 0 0 1 1 2 0 1 0 next 0 1 1 2 2 3 1 2 是否相等 true false true false true false true false nextval 0 1 0 2 1 3 0 2