KMP算法中,next数组和nextval数组的计算是学习的重难点。
对于主串S,模式T,有如下定义:
next[j] | 0 j=1 l+1 前后缀相等最大长度+1 1 前后缀不相等 |
nextval[j] | 0 j=1 n[j] Tj != Tnv[j] nv[n[j]] Tj == Tnv[j] |
此处,可通过C++程序求解next数组进行验证:
#include <iostream>
#include <string>
using namespace std;
void getNext(const string& p,int next[]){
int len = (int)p.size();
next[0] = -1;
int k = -1;
int j = 0;
while(j < len - 1){
if(k == -1 || p[j] == p[k])
{++j; ++k; next[j] = k;}
else k =