|
10鱼币
#include <stdio.h>
#include <string.h>
typedef char* String;
void get_next(String a,int *next)
{ int i=0,j=1;
next[1]=0;
while(j<a[0])
{
if(i==0||a[i]==a[j])
{
i++;
j++;
if(a[i]!=a[j])
{
next[j]=i;
}
else
{
next[j]=next[i];
}
}
else
{
i=next[i];
}
}
}
void init_kmp(String a,String b)
{
int next[255];
int i=1,j=1;
get_next(b,next);
while(i<=a[0])
{
while(i<=a[0]&&j<=b[0])
{
if(j==0||a[i]==b[j])
{
i++;
j++;
}
else
{
j=next[j];
}
}
if(j>b[0])
{
printf("%d\n",i-b[0]);
}
else
{
printf("%d",0);
}
j=0;
}
}
void main()
{
char a[255]=" BBC ABCDABCDABDAB ABCDABCDABDEABCDABD";
char b[255]=" ABCDABD";
a[0]=(int)(strlen(a))-1;
b[0]=(int)(strlen(b))-1;
init_kmp(a,b);
}
大侠帮忙看看,哪里需要改进的地方,虽然写出来了,但是貌似有个别点还是有点模糊,其中有的还是参考别人的写出来的。 |
最佳答案
查看完整内容
我刚才调试了一下 我知道原因了 我之前觉得是1 3 7
|