希望在Str 中删掉 1个屏蔽词(一个屏蔽词可能出现多次)
求最后的串
栈+hash
#include <iostream>
#include <cstring>
using namespace std;
const int N =1e6+3;
#define int long long
int bas=29,pow[N],h[N];
char a[N],b[N];
int n,m, st[N],hh;
int f2(int l,int r){
return h[r]-h[l-1]*pow[r-l+1];
}
signed main(){
int i,j;
pow[0]=1;
for(i=1;i<=1e6;i++) pow[i]=pow[i-1]*bas;
cin>>a+1>>b+1;
n=strlen(a+1),m=strlen(b+1);
int vb= 0;
for(i=1;i<=m;i++)
vb =vb*bas+b[i];
for(i=1;i<=n;i++){
st[++hh]=a[i]; h[hh]=h[hh-1]*bas+a[i];
if(hh-m+1>=1&&f2(hh-m+1,hh)==vb) hh-=m;
}
for(i=1;i<=hh;i++) cout<<char(st[i]);
}
浙公网安备 33010602011771号