OJ9-2B.KMP附测试样例

OJ9-2B.KMP附测试样例
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int KMP(char a[],char key[],int next[],int i);
int main()
{
char*a;
char*key;
a =malloc(sizeof(char)*220);
key =malloc(sizeof(char)*22);
a[0]=1;
key[0]=1;
int i =0;
char y;
while((y =getchar())!='\n'&& y !=EOF) {
a[++i]= y;
}
i =0;
while((y =getchar())!='\n'&& y !=EOF) {
key[++i]= y;
}
int next[20];
int j, k;
int keyLen;
keyLen =strlen(key)-1;
j =1;
k =0;
next[1]=0;
while(j <= keyLen)
{
if(k ==0|| key[k]== key[j])
{
j++;
k++;
next[j]= k;
}
else
{
k = next[k];
}
}
for(i =1; i <= keyLen; i++)
{
printf("%d,", next[i]);
}
printf("\n");
int index;
index =KMP(a, key, next,0);
int flag =0;
while(index !=0)
{
flag =1;
printf("%d\n", index);
index =KMP(a, key, next, index +1); }
if(flag ==0)
{
printf("-1");
}
return0;
}
int KMP(char a[],char key[],int next[],int i) {
int j =1;
int aLen =strlen(a)-1;
int keyLen =strlen(key)-1;
while(i <= aLen && j <= keyLen)
{
if(j ==0|| a[i]== key[j])
{
i++;
j++;
}
else
{
j = next[j];
}
}
if(j == keyLen +1)
{
return i - keyLen;
}
else
{
return0;
}
}
测试样例:
aaaaaaaaa
a
aaaaaaaaaa
aa
a
a
01122345678909876543112245611231224563534151341513515313111122011223456789098765431122456 11231224563534151341513515313111122
1122
kkkabcdefgabcdefgabcdefkkkkkkkkkkkkkkkkkkkkkkk
abcdefgabcdefgabcdef
10938401705103581035081193510985107051358153-1-351-1318
abcdabcd
abcdefgabcdefgabcdefkkkkkkkkkkkkkkkkkkkkkkk
abcdefgabcdefgabcdef

本文发布于:2024-09-22 05:22:43,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/93063.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:测试   样例
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议