HDU2087【KMP-next】

来源:互联网 发布:ubuntu安装分区设置 编辑:程序博客网 时间:2024/04/28 03:09
思路:

利用next[]的转化。

//#include <bits/stdc++.h>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;const int N=1e3+10;char p[N],s[N];int lenp,lens,Next[N];void GetNext(){    int i=0,j=-1;    Next[0]=-1;    while(i<lenp)    {        if(j==-1||p[i]==p[j])            Next[++i]=++j;        else            j=Next[j];    }}int KMP(){    int i=0,j=0,ans=0;    while(i<lens)    {        if(j==-1||s[i]==p[j])        {            i++;            j++;            if(j==lenp)            {                ans++;                j=0;            }        }        else            j=Next[j];    }    return ans;}int main(){    while(scanf("%s",s))    {        if(strcmp(s,"#")==0) break;        scanf("%s",p);        lens=strlen(s);        lenp=strlen(p);        GetNext();        printf("%d\n",KMP());    }    return 0;}


0 0