#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
const int N = 100010,M=N*10;
int n,m;
char a[N],b[M];
int ne[M];
int main(void)
{
cin >> n >> a+1 >> m >> b+1;
for(int i=2,j=0;i<=n;i++)
{
while(j&&a[i]!=a[j+1]) j=ne[j];
if(a[i]==a[j+1]) j++;
ne[i]=j;
}
for(int i=1,j=0;i<=m;i++)
{
while(j&&b[i]!=a[j+1]) j=ne[j];
if(b[i]==a[j+1]) j++;
if(j==n)
{
printf("%d ",i-n);
j=ne[j];
}
}
return 0;
}
实用算法模板——kmp字符匹配算法
最新推荐文章于 2024-09-13 13:21:04 发布
这篇文章展示了如何使用C++中的KMP算法(Knuth-Morris-Pratt算法)来高效地在一组字符数组中查找目标子串。通过预处理模式串的最长公共前后缀,该算法避免了重复的字符比较,提高搜索效率。
摘要由CSDN通过智能技术生成