HDU 2087-剪花布条
HDU 2087
KMP算法
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a[1001],b[1001];
int nextd[1001];
void gnext()
{
int l1=strlen(a+1);
int l2=strlen(b+1);
int s=1,t=0;
while(s<=l2)
{
if(t==0||b[s]==b[t])
{
t++;
nextd[++s]=t;
}
else
t=nextd[t];
}
}
int kmpd()
{
int l1=strlen(a+1);
int l2=strlen(b+1);
int cnt=0;
int s=1,t=1;
while(s<=l1)
{
if(t==0||a[s]==b[t])
{
t++;
s++;
if(t==l2+1)
{
cnt++;
s+=l2-1;
}
}
else
t=nextd[t];
}
return cnt;
}
int main()
{
int i,j,k,n,m,l1,l2,l;
while(~scanf("%s",a+1))
{
l1=strlen(a+1);
if(l1==1&&a[1]=='#')
break;
scanf("%s",b+1);
l2=strlen(b+1);
gnext();
printf("%d\n",kmpd());
}
return 0;
}
还没有评论,来说两句吧...