一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
abcde a3
aaaaaa aa
#
0
3
题意:》》》
思路:模板KMP算法。。。
#include<cstdio>
#include<cstring>
#include<algorithm>
const int N=1000005;
using namespace std;
int Next[1005];
char s[1005],t[1005];
int KMP(char* s,int l1,char* t,int l2)
{
int i=0,j=0,k=0;
while(i<l1)
{
if(j==-1||s[i]==t[j])
{
++i;
++j;
if(j==l2)
{
i+=l2-1;
k++;
}
}
else
j=Next[j];
}
return k;
}
void Getnext(char *t,int l2)
{
int i=0,j;
Next[i]=-1;j=Next[i];
while(i<l2)
{
if(j==-1||t[i]==t[j])
Next[++i]=++j;
else
j=Next[j];
}
}
int main()
{
while(~scanf("%s",s))
{
if(s[0]=='#') break;
scanf("%s",t);
int l1=strlen(s),l2=strlen(t);
Getnext(t,l2);
printf("%d\n",KMP(s,l1,t,l2));
}
return 0;
}