KMP算法

来源:互联网 发布:类似葫芦侠的软件 编辑:程序博客网 时间:2024/06/05 17:15

KMP算法

主要参考《数据结构与算法》——许卓群,这本书中对KMP算法的讲解比较详细,而且易于理解。

#include<iostream>#include<string>using namespace std;void findnext(string &P,int *next){int n=P.size();if(n==0)return;next[0]=0;    int i=1;while(i<n){int k=next[i-1];while(k>0 && P[i]!=P[k])k=next[k-1];if(P[i]==P[k])next[i]=k+1;elsenext[i]=0;i++;}}int KMP(string &P,string &S,int *next){int n=P.size();int m=S.size();if(m<n)return 0;int i=0,j=0;int cnt=0;for(i=0;i<m;i++){while(P[j]!=S[i] && j>0)j=next[j-1];if(P[j]==S[i])j++;if(j==n){cnt++;j=0;}}return cnt;}int main(){int N;cin>>N;int *cnt=new int[N];string *S=new string[2*N];for(int i=0,k=0;i<2*N;i++,k++){cin>>S[i];int n=S[i].size();int *next=new int[n];findnext(S[i],next);i++;cin>>S[i];cnt[k]=KMP(S[i-1],S[i],next);delete [] next;next=NULL;}for(int i=0;i<N;i++)cout<<cnt[i]<<endl;delete [] cnt;delete [] S;S=NULL;return 0;}

题目:http://hihocoder.com/problemset/problem/1015

0 0
原创粉丝点击