根据算法思路自己实现了kmp算法(未优化)

来源:互联网 发布:淘宝配送地在哪里修改 编辑:程序博客网 时间:2024/06/05 17:00

贴一下代码,日后再补充。

每一天都在尝试提高对计算机的兴趣,羡慕那些感兴趣、努力并且效率很高的程序员或准程序员,处于尴尬境地的我也只能默默努力!马上就大三了,不想一直高不成低不就的。




/** dandelion * * 20170807 * kmp算法 * */#include <iostream>#include<string>using namespace std;/**< len:匹配字符串的长度 */void getNext(int *next,string shortStr,int len){    /**q:匹配字符串截取长度*/    int q = 2;    for(;q<=len; q++)    {        for(int i=1 ;i<q; i++)        {            if(  shortStr.substr(0,i) == shortStr.substr(q-i,i) )/**比较前i位与后i位是否相同*/                next[q-1]=i;/**前后缀相同的长度*/        }    }}/**< */int Kmp(int *next,string longStr,string shortStr,int *rezult ,int lenLong,int lenShort){    int i = 0;    int Long = lenLong;    int Short = lenShort;    int loc = 0;/**< len:目标字符串的位置*/    int q = 0;/**< 匹配字符串的位置*/    while(loc<Long)    {        q=0;        while(q<Short)        {            if(longStr[loc]!=shortStr[q])/**< 匹配不成功时,目标字符串位置根据next【】向后移动*/            {                loc=loc-next[q]+1;                break;            }            else            {                q++;                loc++;            }        }        if(q==Short)            rezult[i++]=loc-Short;    }    return i;}int main(){    string longString("babcbabcabcaabcabcabcacabc");    string shortString("abcabcacab");    int lenLong = longString.length();    int lenShort = shortString.length();    int next[lenShort]={0};    int result[20];    getNext(next,shortString,lenShort);/**计算next数组*/    int x = Kmp(next,longString,shortString,result,lenLong,lenShort);    for(int i = 0 ; i < x; i++)        cout<<result[i]<<" ";    //for(int i = 0; i<lenShort; i++)    //    cout<<next[i]<<" ";    return 0;}




原创粉丝点击