开发者社区> 问答> 正文

用KMP算法写的完整程序,麻烦您了

用KMP算法写的完整程序,麻烦您了

展开
收起
知与谁同 2018-07-20 09:50:41 1168 0
1 条回答
写回答
取消 提交回答
  • 社区管理员
    自己写的测试了几个结果是对的
    性能没有好的数据测试
    仅供参考,主要靠你自己

    /////////////////////////////////c++////////////////////////////////////////////////////
    #include<iostream>
    #include<string>
    #include<cmath>
    using namespace std;

    int *next;
    string mString;
    string nString;

    void getNext(string n)
    {
    next=new int[n.length()];
    char nHead=n[0];
    for(int j=0;j<n.length();j++)
    {
    next[j]=0;
    for(int i=j-1;i>(j)/2;i--)
    {
    if(n[i]==nHead)
    {
    int tHead=i;
    int tEnd=j-1;
    int count=0;
    for(int h=tHead;h<=tEnd;h++)
    {
    if(n[count++]!=n[h])
    break;
    }
    if((count==tEnd-tHead+1)&&n[count]!=n[j])
    next[j]=count;
    }
    }
    }
    }

    int main()
    {
    cout<<"input main String please!"<<endl;
    cin>>mString;
    cout<<"input sub String please!"<<endl;
    cin>>nString;

    getNext(nString);
    int pos;//第一个匹配模式的首字母的实际位置
    for(int i=0,j=0;i<=mString.length()&&j<=nString.length();)
    {
    if(j==nString.length())
    {
    pos=i-j+1;
    cout<<"successed and start postion is "<<pos<<endl;
    delete[]next;
    return 0;
    }
    if(mString[i]!=nString[j])
    {
    if(j==0)
    i++;
    else
    j=next[j];
    }
    else
    {
    i++;
    j++;
    }
    }
    cout<<"failed!"<<endl;
    delete[]next;
    return 0;
    }
    2019-07-17 22:55:56
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载