2021算法竞赛入门班第十节课字符串练习题
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021算法竞赛入门班第十节课字符串练习题相关的知识,希望对你有一定的参考价值。
目录
救救企鹅【KMP】
https://ac.nowcoder.com/acm/problem/20862
KMP匹配,记录匹配的开始下标。
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
char s[N],a[N],b[N];
int ne[N],n,m;
unordered_map<int,int>mp;
int main(void)
cin>>s+1>>a+1>>b+1;
int n=strlen(a+1),m=strlen(s+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&&s[i]!=a[j+1]) j=ne[j];
if(s[i]==a[j+1]) j++;
if(j==n) mp[i-n+1]=1;//匹配了记录最开始匹配的下标
for(int i=1;i<=m;i++)
if(mp[i]) cout<<b+1,i=i+n-1;//替换
else cout<<s[i];
return 0;
以上是关于2021算法竞赛入门班第十节课字符串练习题的主要内容,如果未能解决你的问题,请参考以下文章