一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
abcde a3 aaaaaa aa #
0 3
#include<stdio.h>
#include<string.h>
using namespace std;
const int N = 1005;
void getNext(char p[],int m,int next[]){
int j=0;
int t=-1;
next[0]=-1;
while(j<m-1){
if(t<0||p[j]==p[t])
next[++j]=++t;
else t=next[t];
}
}
void Kmp(char str[],int n,char p[],int m){
int next[N];
getNext(p,m,next);
int cnt=0;
for(int i=0,j=0;i<n&&j<m;){
if(j<0||str[i]==p[j]){
i++;
j++;
}
else j=next[j];
if(j==m){
cnt++;
j=0;
}
}
printf("%d\n",cnt);
}
int main(){
char str[N],p[N];
while(scanf("%s",str)!=EOF){
if(str[0]=='#') break;
scanf("%s",p);
int n=strlen(str);
int m=strlen(p);
Kmp(str,n,p,m);
}
return 0;
}