KMP的Next数组:模式串的前缀与后缀的“相交”长度
KMP算法步骤:
1.先算next数组
2.若失配(此时模式串下标为j),利用Next数组求出失配后滑动的新位置
a.Next[j] \geq 0,则模式串右移 j-Next[j] 位
b.Next[j] = -1,则模式串右移 j+1 位
初始 i = 0, j = -1,Next[ 0 ] = -1(为了后面计算方便);
Step1:
由于j == -1,i&j++,且Next[i] = j,即Next[1] = 0; 此时 i = 1, j = 0;
下一个循环:p[ i ] != p[ j ],所以 j = Next[ j ] = Next[ 0 ] = -1,j回退
j == -1, i&j++,此时 i = 2, j = 0; Next[ i ] = j,即Next [ 2 ] = 0
Step2:
p [ 2 ] == p [ 0 ] -> i&j++ -> i = 3, j = 1, Next[ 3 ] = 1;