#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-05-30 20:15:33 发布