#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
char s[1010];
char t[2020];
int p[1010];
void get_p(int n)
{
p[0]=-1;
for(int i=1,j=-1;i<=n;i++)
{
while(j>=0&&s[j+1]!=s[i])
{
j=p[j];
}
j++;
p[i]=j;
}
}
int ans=0;
int j=-1;
int kmp(int start,int n,int m)
{
for(int i=start;i<=m;i++)
{
while(j>=0&&s[j+1]!=t[i])
{
j=p[j];
}
j++;
if(j==n)
{
ans++;
j=p[j];
start=i+n;
return kmp(start,n,m);
}
}
return ans;
}
int main()
{
while(scanf("%s",t+1)&&t[1]!='#')
{
scanf("%s",s+1);
int n,m;
n=strlen(s+1);
m=strlen(t+1);
get_p(n);
ans=kmp(0,n,m);
printf("%d\n",ans);
ans=0;
}
return 0;
}
czl蒟蒻的模板库3——KMP
最新推荐文章于 2018-08-01 19:28:37 发布