KMP算法实现

来源:互联网 发布:淘宝店怎样增加流量 编辑:程序博客网 时间:2024/06/03 14:44

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;}
0 0