Description
模板题啦~
Code
//【模板】KMP字符串匹配
#include <cstdio>
#include <cstring>
int const L=1e6+10;
char s1[L],s2[L];
int nxt[L];
int main()
{
scanf("%s",s1+1); scanf("%s",s2+1);
int L1=strlen(s1+1),L2=strlen(s2+1);
nxt[0]=-1;
for(int i=1;i<=L2;i++)
{
int x=nxt[i-1];
while(x!=-1&&s2[x+1]!=s2[i]) x=nxt[x];
nxt[i]=x+1;
}
for(int i=0,j=0;i<=L1;i++)
{
if(j==L2) printf("%d\n",i-L2+1);
while(j&&s1[i+1]!=s2[j+1]) j=nxt[j];
if(s1[i+1]==s2[j+1]) j++;
}
for(int i=1;i<=L2;i++) printf("%d ",nxt[i]);
return 0;
}
本文详细介绍了一种高效的字符串匹配算法——KMP算法。通过具体的代码实现,展示了如何使用KMP算法进行字符串匹配,包括预处理阶段和匹配过程。文章还提供了一个完整的C++代码示例,帮助读者理解KMP算法的工作原理。
1015

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



