一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
abcde a3 aaaaaa aa #
0 3
纪念自己的模板:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int mx = 1100;
char T[mx], S[mx];
int mynext[mx], len1, len2;
void getmynext(){
int j = 0, k = -1;
mynext[0] = -1; //忘了写这个条件
int len = strlen(T);
while(j < len){
if(k == -1 || T[k] == T[j]){
mynext[++j] = ++k;
}
else{
k = mynext[k];
}
}
}
int KMP(int i , int j){ //( S , T)
while(i < len1 && j < len2){
if(j == -1 ||S[i] ==T[j] ){
j++;
i++;
}
else{
j = mynext[j];
}
}
if( j == len2)
return i - len2;
else
return -1;
}
int main(){
while(scanf("%s", S) && S[0] != '#'){
scanf("%s", T);
len1 = strlen(S);
len2 = strlen(T);
getmynext();
int cor = 0, count = 0;
cor =KMP(cor, 0);
while( cor != -1 && cor < len1){
count++;
cor =KMP(cor + len2, 0);
}
printf("%d\n", count);
}
return 0;
}