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;
    }
  • 相关阅读:
    Ajax基础知识详解
    php 基础语法整理
    06 js-递归
    原生js 实现瀑布流布局
    解决高度坍塌问题
    jQuery动画效果
    jQuery增删元素类名
    JQueryTab栏切换(important!)
    jQuery排他思想(important!)
    jQuery设置元素样式
  • 原文地址:https://www.cnblogs.com/xiaoying1245970347/p/4662196.html
Copyright © 2011-2022 走看看