#include<algorithm>
#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
using namespace std;
void Getnext(char *p,int next[])
{
int j=0;
int k=-1;
next[0]=-1;
int pLen=strlen(p);
while(j<pLen)
{
if(k==-1||p[j]==p[k])
{
++j;
++k;
if(p[j]!=p[k])
next[j]=k;
else
next[j]=next[k];
}
else
k=next[k];
}
}
int KMPSearch(char *s,char *p,int next[])
{
int i=0;
int j=0;
int sum=0;
int sLen=strlen(s);
int pLen=strlen(p);
while(i<sLen)
{
if(s[i]==p[j]||j==-1)
{
i++;
j++;
}
else
{
j=next[j];
}
if(j==pLen)
{
sum++;
j=0;//找到一段,继续从头开始寻找
}
}
return sum;
}
int main()
{
char a[1020];
char b[1020];
while(~scanf("%s",a))
{
int next[1020];
if(a[0]=='#')
break;
scanf("%s",b);
Getnext(b,next);
printf("%d\n",KMPSearch(a,b,next));
}
}
剪花布条
最新推荐文章于 2023-04-12 21:21:19 发布