czl蒟蒻的模板库3——KMP

来源:互联网 发布:樱井知香作品在线播放 编辑:程序博客网 时间:2024/06/06 19:51
#include<iostream>#include<cstring>#include<stdio.h>using namespace std;char s[1010];char t[2020];int p[1010];void get_p(int n){    p[0]=-1;    for(int i=1,j=-1;i<=n;i++)    {        while(j>=0&&s[j+1]!=s[i])        {            j=p[j];        }        j++;        p[i]=j;    }}    int ans=0;    int j=-1;int kmp(int start,int n,int m){    for(int i=start;i<=m;i++)    {        while(j>=0&&s[j+1]!=t[i])        {        j=p[j];        }        j++;        if(j==n)        {            ans++;            j=p[j];            start=i+n;            return kmp(start,n,m);        }    }    return ans;}int main(){    while(scanf("%s",t+1)&&t[1]!='#')    {        scanf("%s",s+1);        int n,m;        n=strlen(s+1);        m=strlen(t+1);        get_p(n);        ans=kmp(0,n,m);        printf("%d\n",ans);        ans=0;    }    return 0;}
原创粉丝点击