[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher B HDU 1686

来源:互联网 发布:淘宝买家秀福利木耳 编辑:程序博客网 时间:2024/04/30 04:29

题目地址:https://vjudge.net/contest/70325#problem/B

思路:KMP模板题

AC代码:

#include<bits/stdc++.h>using namespace std;const int maxn=1000000+10;char s[maxn],t[maxn];int Next[maxn];int slen,tlen;int caset;void getnext(){    int j,k;    j=0,k=-1,Next[0]=-1;    while(j<tlen)    {        if(k==-1 || t[j]==t[k])            Next[++j]=++k;        else            k=Next[k];    }}int kmp_count(){    int ans=0,i=0,j=0;    if(slen==1 && tlen==1)    {        if(s[0]==t[0])            return 1;        else            return 0;    }    for(int i=0;i<slen;i++)    {        while(j>0 && s[i]!=t[j])           j=Next[j];        if(s[i]==t[j])            j++;        if(j==tlen)        {            ans++;            j=Next[j];        }    }    return ans;}int main(){    scanf("%d",&caset);    while(caset--)    {        scanf("%s%s",t,s);        slen=strlen(s);        tlen=strlen(t);        getnext();        int ans=kmp_count();        printf("%d\n",ans);    }}


0 0