首先要了解 最长相等前后缀,比如串ababa,它的最长相等前后缀就是aba。
手算next数组:
例如:求串 a b c a c 的next数组,首先画一个表格
编号 | 1 | 2 | 3 | 4 | 5 |
串(S) | a | b | c | a | c |
部分匹配值(PM) | 0 | 0 | 0 | 1 | 0 |
部分匹配值就是 最长相等前后缀的长度
next数组就是把所有的PM的值向右移一位,第一位补-1,也就是
-1 0 0 0 1
再加1
[next] 0 1 1 1 2
这里需要注意的一个点是:next数组可以从-1开始,也可以从0开始(两个都对)。如果题目要求从0开始,那么直接对刚刚求得的-1开始的next数组每个数都+1就OK。
如果题目给的字符串的下标i是从0开