介绍
KMP算法有几种表达方法,这里是,next[i]表示0~i-1的前后缀匹配情况(第i位不参与)。
Next 数组的递推关系
所以这里的next数组有以下特征:
- next[0]=-1(规定)
- next[1]=0,因为匹配时不包含p[1],则只有p[0]参与匹配,规定一个数字匹配结果为0(不包含字符串本身);
- 匹配的过程中不断进行k=next[k],只有当k=-1时,才表示无法找到可以匹配的前后缀,此时next[j+1]=0,因为要比较next[j]?=next[k],所以k=0时也是在比较。
从图中可以看出,此时,K=0,J=3,我们比较p[0]与p[3]是为了计算p[4],因为p[0]=p[3],所以p[4]=p[3]+1=1;
此时,k=1,j=4,因为p[1]=p[4],所以p[5]=p[4]+1=2;
1 | void GetNext(int* next, char* p) |
完整的KMP
1 |
|