#include <stdio.h>
#include <string.h>
char str[100000];
char str1[100000];
char str2[200000];
int next[100000];
void getNext(int m)
{
int i=1,j=0;
while(i<m)
{
if(j==0||str1[i]==str1[j])
{
i++,j++;
if(str1[i]==str1[j])
next[i]=next[j];
else
next[i]=j;
}
else
j=next[j];
}
}
void kmp(int m,int n)
{
int i=0,j=0;
while(i<n&&j<m)
{
if(j==0||str2[i]==str1[j])
++j,++i;
else
j=next[j];
}
if(j>=m)
puts("yes");
else
puts("no");
}
int main()
{
int m,n;
while ( gets(str) ) {
gets(str1);
strcpy(str2, str);
strcat(str2, str);
m=strlen(str1);
n=strlen(str2);
getNext(m);
kmp(m,n);
}
}
hdu 2203 (kmp)
最新推荐文章于 2021-02-28 08:34:08 发布
本文详细介绍了一种高效的字符串匹配算法——KMP算法,并通过具体的C语言实现代码展示了该算法的工作原理。KMP算法能够有效地避免传统模式匹配中的重复比较,提高搜索效率。
450

被折叠的 条评论
为什么被折叠?



