zoukankan      html  css  js  c++  java
  • KMP算法_学习笔记

    #include <cstdlib>
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int * buildNext(char *P){
        size_t m=strlen(P), j=0;
        int* N=new int[m];//next表
        int  t=N[0]=-1;
        while(j<m-1){
          if(0>t||P[j]==P[t]){
               j++;t++;
               N[j]=(P[j]!=P[t]?t:N[t]);//改进 
          }
          else  t=N[t];
        } 
        return N;
    }
     
    int match(char* P,char* T){
       int* next=buildNext(P);
       int n=(int)strlen(T),i=0;
       int m=(int)strlen(P),j=0;
       while(j<m&&i<n)
           if(0>j||T[i]==P[j]){i++;j++;}
           else j=next[j];
       delete [] next;
       return i-j;//返回首次匹配到到的位置下标(未找到则返回目标串长度) 
    }
    
    
    int main(int argc, char *argv[])
    {   char T[1000];
        char P[50];
        while(cin>>T){
        cin>>P;
         
        cout<<match(P,T)<<endl;
        
        }
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

      

  • 相关阅读:
    奔溃瞬间1
    面试知识点blog汇总
    贪心
    树 和 图
    DFS 和 BFS
    STL
    哈希表
    手写堆
    并查集
    二项式反演学习笔记
  • 原文地址:https://www.cnblogs.com/jieforever/p/6353823.html
Copyright © 2011-2022 走看看