题意:
现在有一个长度为n的字符串,然后有m个操作,对于每个操作,给出两个字符x,y; 使字符串中所有x字符全都变成y字符,同时y字符也变成x字符。
思路:
真是智商拙计了。。。比赛时候竟然卡了这题(弱)伤(菜)心
这里我们不要对原串进行操作,我们只需对26个字母进行操作就好。
数组b的作用是记录当前这个字母现在应该在第几个字母所在的位置,然后a数组是记录当前字母所在的位置此时应该填写什么字母,即为保存修改的作用。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
#include<map>
using namespace std;
#define maxn 200010
typedef __int64 ll;
char ss[maxn];
int a[33],b[33];
char x[3],y[3];
int main(){
int n,m;
scanf("%d%d",&n,&m);
scanf("%s",ss);
for(int i=0;i<26;i++){
a[i]=b[i]=i;
}
for(int i=0;i<m;i++){
scanf("%s%s",x,y);
if(x[0]==y[0]) continue;
swap(a[b[x[0]-'a']],a[b[y[0]-'a']]);
swap(b[x[0]-'a'],b[y[0]-'a']);
}
for(int i=0;i<n;i++){
int t=ss[i]-'a';
printf("%c",a[t]+'a');
}
printf("\n");
}
本文介绍了一种通过操作字母映射而非直接修改原字符串的方法来高效处理字符串替换问题。利用两个数组记录字符之间的转换关系,避免了多次直接在字符串上进行替换所带来的效率损失。
1330

被折叠的 条评论
为什么被折叠?



