AcWing 831. KMP字符串
原题链接
简单
作者:
dys
,
2020-09-20 22:47:44
,
所有人可见
,
阅读 396
复习一下字符串哈希
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=1e6+10;
int pp[M],f[M],ff[N];
int main(){
int a,b;
char p[N],s[M];
cin>>a;
scanf("%s",p+1);
int n = strlen(p+1);
cin>>b;
scanf("%s",s+1);
int m = strlen(s+1);
pp[0]=1;
for(int i=1;i<=n;i++){
ff[i]=ff[i-1]*131+(p[i]-'a'+1);
}
for(int i=1;i<=m;i++){
f[i]=f[i-1]*131+(s[i]-'a'+1);
pp[i]=pp[i-1]*131;
}
for(int i=n;i<=m;i++){
if(f[i]-f[i-n]*pp[n]==ff[n]) cout<<i-n<<" ";
}
return 0;
}