hdu2087解题报告

来源:互联网 发布:《算法的乐趣》 编辑:程序博客网 时间:2024/05/16 10:31

题目大意:有一个字符串,还有模板字符串,问模板字符串在前一个字符窜中出现了几次?

解题思路:kmp算法水之,找到一次加1即可。

ac代码:

#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace std;const int maxn=1000+100;char s[maxn],t[maxn];int Next[maxn];//失去配表int num;void getfail(char *P,int * f){        int m=strlen(P);        f[0]=0;        f[1]=0;        for(int i=1;i<m;i++)        {                int j=f[i];                while(j&&P[i]!=P[j])   j=f[j];                f[i+1]=P[i]==P[j]?j+1:0;        }}void Find(char *T,char *P,int *f){        int n=strlen(T);        int m=strlen(P);        getfail(P,f);        int j=0;        for(int i=0;i<n;i++)        {                while(j&&P[j]!=T[i]) j=f[j];                        if(P[j]==T[i]) j++;                        if(j==m) {num++;j=0;}        }}int main(){        while(scanf("%s",s))        {                num=0;                if(s[0]=='#')  break;                scanf("%s",t);                Find(s,t,Next);                printf("%d\n",num);        }}



0 0
原创粉丝点击