next数组计算方法如下
默认next[0]=-1,字符串从0出发。
计算的方法是:
1 | int j = 0, k = -1; |
其中p是模式串。
接下来我们来推导KMP的状态转移方程。
设$dp[j]$是第j处最大公共真前后缀的长度,那么如果$p[j]==p[k]$,那必然有$dp[j+1]=dp[j]+1=k+1$(可以想象一下,后面一位字符也是相等的,那就说明这里的最大公共真前后缀的长度等于前一位的+1嘛!),并且j和k都递增一次。
next数组计算方法如下
默认next[0]=-1,字符串从0出发。
计算的方法是:
1 | int j = 0, k = -1; |
其中p是模式串。
接下来我们来推导KMP的状态转移方程。
设$dp[j]$是第j处最大公共真前后缀的长度,那么如果$p[j]==p[k]$,那必然有$dp[j+1]=dp[j]+1=k+1$(可以想象一下,后面一位字符也是相等的,那就说明这里的最大公共真前后缀的长度等于前一位的+1嘛!),并且j和k都递增一次。
Update your browser to view this website correctly.&npsb;Update my browser now