HDU 2087 剪花布条

来源:互联网 发布:mac版office破解 编辑:程序博客网 时间:2024/05/29 11:03

题目链接

题目意思

给你一个文本串A,接着给你一个模式串B。问你最多能从文本串中剪出几个模式串。

解题思路

这就是一道KMP的模板题。我们只要找出文本串中含有的最大的模式串的个数即可。
没啥可说的了,直接看代码吧!

代码部分

#include <iostream>#include <stdio.h>#include <string.h>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int maxn=1e3+10;int nex[maxn];string A,B;void GetNext(string B){    int len_B=B.size();    nex[0]=-1;    int k=-1,j=0;    while(j<len_B)    {        if(k==-1||B[j]==B[k])        {            ++k;            ++j;            nex[j]=k;        }        else            k=nex[k];    }}int kmp(string A,string B){    int i=0,j=0;    int ans=0;    int len_b=B.size();    int n=A.size();    while(i<n)    {        if(j==-1||A[i]==B[j])        {            ++i;            ++j;        }        else            j=nex[j];        if(j==len_b)        {            ans++;            j=0;        }    }    return ans;}int main(){    while(cin>>A)    {        if(A=="#")            break;        cin>>B;        GetNext(B);        int sum=kmp(A,B);        cout<<sum<<endl;    }    return 0;}
原创粉丝点击