zoukankan      html  css  js  c++  java
  • KMP算法实现

    next数组用于存储模式串中元素为j位置的最大重叠度。

    //KMP算法实现字符串匹配 
    //
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
     
     void compute_next(int* next,char const*p,int len){
          int j=0;
          int q=next[0]=-1;
          --len;
          while(j<len)
          if(q==-1||p[q]==p[j])
          next[++j]=++q;
          else 
          q=next[q];
          } 
    
    char const* kmp_find(char const*t,int tlen,char const*p,int plen,int const*next){
          int i=-1;
          int j=-1;
          while((i<tlen)&&(j<plen)){
            if((j==-1)||(t[i]==p[j])) {++i;++j;}
            else j=next[j];                        
                                    }
          if(j==plen) return t+i-plen;
          else return 0;                               
                                          }
     
    int main()
    {   char a[100]="ahgdhjggabcabcabbacll";
        char b[12]="abcabcabbac";
        char const* t_;
        int next[11];
        compute_next(next,b,11);
        for(int i=0;i<11;i++)
              cout<<next[i]<<endl;
              
        t_=kmp_find(a,100,b,11,next);
       if(!t_)
          cout<<"can not find mode string in target string!"<<endl;
          else 
          cout<<"the position of mode string in target string is:"<<t_-a+1<<endl;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
  • 相关阅读:
    ScrollView 字典
    centos 6.x 安装redis
    Linux 添加epel源
    Linux 关于解压
    Linux 删除文件夹
    Linux sz rz
    让div 实现 input效果
    解决js浮点数计算bug
    键盘绑定事件和焦点处理
    npm的镜像替换成淘宝
  • 原文地址:https://www.cnblogs.com/xiaoying1245970347/p/4662196.html
Copyright © 2011-2022 走看看