求串′ababaaababaa′的next数组
模式串 | a | b | a | b | a | a | a | b | a | b | a | a |
---|---|---|---|---|---|---|---|---|---|---|---|---|
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
next[1] = 0
next[2] = 1
(这两个值是约定的)
next[3]: "ab"没有相同的前缀和后缀,所以模式串又得从头开始匹配,因此next[3] = 1
next[4]: "aba"的最长公共串是“a”,所以按照下面这个例子,虽然第四位没有匹配上,但是前三位匹配上了,并且第一位和第三位相同,因此可以将模式串整体向右移动,直到将原来的第一位移到原来的第三位上,继续进行匹配,而原来模式串指针指着的第四位现在指向第二位了,因此next[4] = 2
abacfffffffffff...
ababaaababaa
ababaaababaa
next[5]: "abab"的最长公共串是“ab”,next[5] = 3
ababcfffffff...
ababaaababaa
ababaaababaa
next[6]: "ababa"最长公共串是“aba”,next[6] = 4
ababacfffffff...
ababaaababaa
ababaaababaa
next[7]: "ababaa"最长公共串是“a”,next[7] = 2
ababaacffffff...
ababaaababaa
ababaaababaa
next[8]: "ababaaa"最长公共串是“a”,next[8] = 2
next[9]: "ababaaab"最长公共串是“ab”,next[9] = 3
next[10]: "ababaaaba"最长公共串是“aba”,next[10] = 4
next[11]: "ababaaabab"最长公共串是“abab”,next[11] = 5
next[12]: "ababaaababa"最长公共串是“ababa”,next[12] = 6
next数组为
0 | 1 | 1 | 2 | 3 | 4 | 2 | 2 | 3 | 4 | 5 | 6 |