KMP算法next数组的求法:
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
void MakeNext(const string &P, vector<int> &next)
{
int q,k;
int m = P.size();
next[0] = -1;
for (q = 1, k = 0; q < m; ++q)
{
while (k > 0 && P[q] != P[k])
k = next[k-1];
if (P[q] == P[k])
k++;
next[q+1] = k;
}
}
int main()
{
vector<int> next(20,0);
string P = "ababc";
MakeNext(P,next);
for (int i = 0; i < P.size(); i++)
cout<<"next["<<i<<"]:"<<next[i]<<" ";
cout << endl;
return 0;
}
/*
运行结果:-1 0 0 1 2
*/