KMP算法

来源:互联网 发布:中医人工智能系统 编辑:程序博客网 时间:2024/06/07 05:03
//KMP算法实现,参照ACM模板//hihocoder 1015#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=1e6+7;char T[10000+5],S[maxn];int Next[10000+5];void preKmp(char T[],int m,int Next[]){    int i=0,j=-1;    Next[0]=-1;    while(i<m){        while(j!=-1&&T[i]!=T[j]) j=Next[j];        if(T[++i]==T[++j]) Next[i]=Next[j];        else Next[i]=j;    }}int KMP_Count(char T[],int m,char S[],int n){    //T是模式串,S是主串    int i=0,j=0;    int ans=0;    preKmp(T,m,Next);    while(i<n){        while(j!=-1&&S[i]!=T[j])            j=Next[j];        ++i;++j;        if(j>=m){            ans++;            j=Next[j];        }    }    return ans;}int main(){    //freopen("d:\\coding\\data.in","r",stdin);    int t;    cin>>t;    while(t--){        cin>>T>>S;        int ans=KMP_Count(T,strlen(T),S,strlen(S));        cout<<ans<<endl;    }    return 0;}

0 0
原创粉丝点击