一点都没有基础,看网上求next值的算法写得云里雾里的,这里总结一下自己的理解吧
next[j] = 0 当j=1时
next[j] = 1 当j之前的字符串首尾没有匹配的字符时
next[j] = 首尾的匹配数 + 1 当j之前的字符串有首尾匹配的时候
例如:
a b c a a b b a b c d
a b c a a b b a b c d
0 1 (在b之前的a没有匹配的)
a b c a a b b a b c d
0 1 1(在c之前的a b没有匹配)
a b c a a b b a b c d
0 1 1 1(在a之前的a b c没有匹配)
a b c a a b b a b c d
0 1 1 1 2(在a之前的a b c a 标红的地方匹配,匹配字符只有一个,所以next值为1+1=2)
以此类推
a b c a a b b a b c d
0 1 1 1 2 2 3(在a之前的a b c a a b标红的地方匹配,匹配字符有两个个,所以next值为2+1=3)
最后的结果就是
a b c a a b b a b c d
0 1 1 1 2 2 3 1 2 3 4