KMP模板 水水水

来源:互联网 发布:c语言解惑 编辑:程序博客网 时间:2024/06/07 19:47

就是他

#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<map>#include<algorithm>using namespace std;const int N=100005;int nxt[N];int lent,lens;int tot=0;char s[N],t[N];void calcunxt(){    int i=0,j=-1;    nxt[0]=-1;    while(i<lent)    {        if(j==-1||t[i]==t[j])        {            i++;j++;            nxt[i]=j;//记录个数         }        else j=nxt[j];    }}//建表 void kmp(){    int i=0,j=0;    while(i<lens)    {        if(j==-1||s[i]==t[j])        {            i++;j++;            if(j==lent)            {                tot++;//              j=nxt[j];                j=0;            }        }        else j=nxt[j];    }}int main(){    int p,ans[N];    scanf("%d",&p);    for(int i=1;i<=p;i++)    {        tot=0;        memset(nxt,0,sizeof(nxt));        scanf("%s",s);        if (s[0]=='#') break;        scanf("%s",t);        lent=strlen(t);lens=strlen(s);        if(lent>lens)        {swap(s,t);swap(lent,lens);}        calcunxt();        kmp();        printf("%d\n",tot);    }    return 0;}
原创粉丝点击