原理我相信大家已经了解的差不多了,现在看看实际代码吧
cpp:
// cpp实现kmp算法
#include<iostream>
#include<string>
using namespace std;
#include<vector>
vector<int> getnextarr(string patten){
int length = patten.length();
// 初始化next数组
vector<int> nextarr(length,0);
nextarr[0] = -1;
int i=0, j=-1;
while(i<length){
if (j==-1){
i +=1;
j +=1;
}
else if (patten[i]==patten[j]){
i +=1;
j +=1;
nextarr[i] = j;
}
else{
j = nextarr[j];
}
}
return nextarr;
}
int main(){
string astring="ABDABCABABe", patten="ABAB";
vector<int> nextarr = getnextarr(patten);
int i=0, j=0;
int astring_len = astring.length(), patten_len = patten.length();
while(i<astring_len && j<patten_len){
if (j==-1 || astring[i]==patten[j]){
i +=1;
j +=1;
}
else{
j = nextarr[j];
}
}
// 当while结束的时候
if (j==patten_len){
cout<<"find it, and the index = "<<i-j<<endl;
}
else{
cout<<" not found"<<endl;
}
return 0;
}