#include<bits/stdc++.h>
using namespace std;
char A[
1004],B[
1004];
int P[
1004],n,m;
inline void pre(){
P[1]=
0;
int j=
0;
for(
int i=
1;i<m;i++
){
while(j&&B[j+
1]!=B[i+
1]) j=
P[j];
if(B[j+
1]==B[i+
1])j++
;
P[i+
1]=
j;
}
}
inline int kmp(){
int ans=
0,j=
0;
for(
int i=
0;i<n;i++
){
while(j&&B[j+
1]!=A[i+
1]) j=
P[j];
if(B[j+
1]==A[i+
1]) j++
;
if(j==
m){
ans++
;
j=
0;
}
}
return ans;
}
int main(){
while(
1){
scanf("%s",A+
1);
n=strlen(A+
1);
if(n==
1&&A[
1]==
'#')
break;
scanf("%s",B+
1);
m=strlen(B+
1);
pre();
printf("%d\n",kmp());
}
}
转载于:https://www.cnblogs.com/wifimonster/p/10162476.html
相关资源:数据结构—成绩单生成器
转载请注明原文地址: https://win8.8miu.com/read-1480216.html