您的位置:首页 > 其它

KMP算法实现

2015-08-26 18:00 253 查看

KMP算法代码实现

之前看过一些KMP算法的实现 ,但是每次看完就会忘记,今天花了几个小时又理了理思路,加强一下理解:

下面的代码是找出目标串target中包含多少个匹配串partten,代码自己实现,鉴于时间仓促加个人编程能力有限,写的代码也很丑,大牛们可以考虑绕行…

参考:http://www.ituring.com.cn/article/59881

代码块

代码块语法遵循标准markdown代码,例如:

#include<iostream>
#include<string>

using namespace std;
void Find_KMP(const string& target,const string& partten,int& sum){
int par_len = partten.size();
int tar_len = target.size();
int over_ride[par_len];
over_ride[0] = -1;
int index ;
for(int i=1;i<par_len;i++){
index = over_ride[i-1];
while(index>=0 && partten[index+1]!=partten[i]){
index = over_ride[index];
}
if(partten[index+1] == partten[i]){
over_ride[i] = index + 1;
}
else{
over_ride[i] = -1;
}
}
int i=0,j=0;
sum = 0;
while(i<tar_len){
while(j<par_len && i<tar_len){
if(target[i]==partten[j]){
i++;j++;
}
else if(j==0)
i++;
else
j = over_ride[j-1]+1;
}
if(j == par_len && i<tar_len){
sum++;
j = 0;
}
else
break;
}
/**  是否能够找到匹配串的代码
while(i<tar_len&&j<par_len){
if(target[i]==partten[j]){
i++;j++;
}
else if(j==0)
i++;
else
j = over_ride[j-1]+1;
}
if(j == par_len){
return true;
}
else return false;
**/
}
//main函数
int main(){
string target = "ababhababrhah";
string partten = "ab";
int sum ;
/*
if(Find_KMP(target,partten)){
cout << "find" << endl;
}
else cout << "no" <<endl;
*/
Find_KMP(target,partten,sum);
cout <<"sum = " <<sum <<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: