#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char s[100],q[100];
int n,m;
int next[100];
int nextval[100];
void getnext(char q[])
{
int i=1;next[1]=0;int j=0;
while(i<strlen(q+1))
{0
if(j==0||q[i]==q[j])
{
++i;++j;next[i]=j;
}
else j=next[j];
}
}
int kmp(int pos)
{
int i=pos;int j=1;
while(i<=n&&j<=m)
{
if(j==0||s[i]==q[j])
{
++i;++j;
}
else j=next[j];
}
if(j>m) return i-m;
return 0;
}
int main()
{
int n,m;
gets(s);
gets(q);
getnext(q);
n = strlen(s+1);
m = strlen(q+1);
int flag=-1;
int t;
for (int i = 1 ;i <= n;i = t) {
t = kmp(i);
if (t!=0)
{
printf("位置是%d,",t);
flag = 1;
break;
}
if(t == 0) t = i + 1;
}
if (flag==-1) printf("-1");
return 0;
}
数据结构作业 KMP算法
最新推荐文章于 2024-07-14 09:49:31 发布