#include<stdio.h>
#include<string.h>
using namespace std;
const int maxn=100;
int next[maxn];
int next2[maxn];
char a[maxn];
char b[maxn];
int la;
int lb;
int ant1=0,ant2=0,ant3=0;
int abc0(int x)
{
for(int i=x;i<lb+x;i++)
{
ant1++;
if(a[i]!=b[i-x])
return 0;
}
return 1;
}
void abc()
{
int i=0,j=-1;
next[0]=-1;
while(i<lb)
{
if(j==-1||b[j]==b[i])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
void abc2()
{
int i=0,j=-1;
next2[0]=-1;
while(i<lb)
{
ant2++;
if(j==-1||b[j]==b[i])
{
i++;
j++;
if(b[i]!=b[j])
next2[i]=j;
else
next2[i]=next2[j];
}
else
j=next2[j];
}
}
int main()
{
int i=0,j=0;
scanf("%s%s",a,b);
la=strlen(a);
lb=strlen(b);
for(i=0;i<la-lb+1;i++)
{
if(abc0(i))
{
printf("BF查找到位置:%d\n",i+1);
break;
}
}
if(i==la-lb+1)
printf("BF未查找到\n");
printf("BF对比次数:%d\n\n",ant1);
i=0;
j=0;
abc();
while(i<la&&j<lb)
{
ant2++;
if(j==-1||a[i]==b[j])
{
i++;
j++;
}
else
j=next[j];
}
if(j==lb)
printf("kmp查找到位置 %d\n",i-lb+1);
else
printf("kmp未查找到\n");
printf("kmp对比次数:%d\n\n",ant2);
abc2();
i=0;
j=0;
while(i<la&&j<lb)
{
ant3++;
if(j==-1||a[i]==b[j])
{
i++;
j++;
}
else
j=next2[j];
}
if(j==lb)
printf("改进kmp查找到位置 %d\n",i-lb+1);
else
printf("改进kmp未查找到\n");
printf("改进对比次数:%d次\n\n",ant3);
return 0;
}