char t[1000005],p[10005];
int Next[10005];
void getNext()
{
int j=0,k=-1;
int len = strlen(p);
Next[0] = -1;
while(j<len)
if(k==-1||p[j]==p[k])
Next[++j] = ++k;
else
k = Next[k];
}
int KMP()
{
getNext();
int j = 0,i = 0;
int tlen = strlen(t),plen = strlen(p);
while(i<tlen&&j<plen)
{
if(j==-1||t[i]==p[j])
{
++i;
++j;
}
else
j = Next[j];
}
if(j==plen)
return i-plen;
else
return -1;
}
//nextval应该很少用到吧。。。
void getNextval()
{
int j=0,k=-1;
int len = strlen(p);
Next[0] = -1;
while(j<len)
if(k==-1||p[j]==p[k])
{
++j,++k;
if (p[j] != p[k])
Next[j] = k;
else
Next[j] = Next[k];
}
else
k = Next[k];
}
KMP模板
最新推荐文章于 2022-04-05 21:44:17 发布
本文详细介绍了KMP算法的工作原理及其实现过程。通过两个核心函数 getNext 和 KMP 函数,实现了高效的字符串匹配搜索。文章提供了完整的代码示例,并解释了如何避免重复比较,提高搜索效率。
326

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



