数据结构 KMP

来源:互联网 发布:淘宝 发票 搜索什么 编辑:程序博客网 时间:2024/05/22 13:08
#include<stdio.h>
#include<string.h>
char marray[56],sarray[56];
int next[56];
void get_next()
{
int m,s,t;
next[0]=-1;
m=0;
s=-1;
while(m<strlen(sarray))
{
if(s==-1||sarray[s]==marray[m])
{
s++;
m++;
if(sarray[s]==sarray[m])
next[m]=next[s];
else
next[m]=s;
}
else
s=next[s];
}
}
int KMP()
{
int lenm=strlen(marray);
int lens=strlen(sarray);
int m=0;
int s=0;
while(m<lenm&&s<lens)
{
if(s==-1||marray[m]==sarray[s])
{
s++;
m++;
}
else
s=next[s];
}
if(s<lens)
return -1;
else
return m-lens;

}
int main()
{
while(1)
{
scanf("%s%s",marray,sarray);
printf("%s\n%s\n",marray,sarray);
get_next();
int t=KMP();
for(int i=0;i<strlen(sarray);i++)
printf("%d\n",next[i]);
if(t<0)
printf("No\n");
else
printf("%d\n",t);
}
return 0;
}
0 0