// KMP算法
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void get_next(string T,vector<int> &next){
next.resize(T.size());
int i=1,j=0;
next[0] =1;
while (i<T.length()-1){
if(j==0 || T[i]==T[j]) { ++i; ++j; next[i]=j; }
else j=next[j];//这里又是一个递归,使用的是已经求出来的next[]数组。
}
}
int Index(string S,string T,vector<int> &next){
int i=0,j=0;
while(i<S.length() && j<T.length()){
if(j==0 || S[i]==T[j]) { i++; j++;}
else j=next[j];
}
if (j==T.length()) {return i-T.length();}
else return 0;
}
int main()
{
string s="abcd";
string a="cd";
vector<int> next;
get_next(a,next);
int res=Index(s,a,next);
cout << res <<endl;
system("pause");
return 0;
}
KMP算法(C++实现)
最新推荐文章于 2021-03-18 21:20:40 发布