求串′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