#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
int ans,to[1010];
void getto(string p) {
to[0]=-1;
int j=0,k=-1;
while(j<p.size()-1)
if(k==-1||p[j]==p[k]) {
to[j]=k;
j++;
k++;
}else k=to[k];
}
int kmp(string t,string p) {
int i=0,j=0,l1=t.size(),l2=p.size();
memset(to,0,sizeof(to));
getto(p);
while(i<l1&&j<l2){
if(j==-1||t[i]==p[j]){
i++;
j++;
if(j==l2)ans++;
}
else j=to[j];
}
if(j==l2)return i-j;
else return -1;
}
int main(){
int l,i;
string t,p;
while(1){
ans=0;
cin>>t;
if(t.size()==1&&t[0]=='#')return 0;
cin>>p;
while(1){
l=kmp(t,p);
if(l==-1)break;
t=t.substr(l+p.size());
}
printf("%d\n",ans);
}
return 0;
}
HDU 2087
最新推荐文章于 2020-05-06 00:06:21 发布