https://blog.csdn.net/deerly_/article/details/78868208
举个栗子,ababababc和ababc的匹配,ababc的Next是00120, 当c个第五个a不匹配了,就说明他们前四个是匹配的,这时Next[3]=2,说明ab和前缀ab是一样的,既然34位置上的ab可以和母串ab匹配,前缀的ab自然就可以,这样直接去比较abab*a*babc和abab*c* 就好啦,省了很多时间。本来kmp就是不想浪费之前已经匹配过的信息才加以优化的。
另:求next数组的经典例子
1 2 3 4 5 6 7
a b a b a b c
0 0 1 2 3 4 0
求最后一个字符的next值的时候,我们需要先将c(7) 与 a(5)
先进行比较,因为c之前的abab与a之前的abab相同
接着会跳转c(7)与a(3)比较
因为c之前的ab与a之前的ab相同,失配后跳转的幅度变大了。