[蓝桥杯 2022 国 AC] 替换字符
时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB
难度:困难
描述
给定一个仅含小写英文字母的字符串 s,每次操作选择一个区间 [li,ri] 将 s 的该区间中的所有字母 xi 全部替换成字母 yi,问所有操作做完后,得到的字符串是什么。
输入描述
输入的第一行包含一个字符串 s。
第二行包含一个整数 m。
接下来 m 行,每行包含 4 个参数 li,ri,xi,yi,相邻两个参数之间用一个空格分隔,其中 li,ri 为整数,xi,yi 为小写字母。
输出描述
输出一行包含一个字符串表示答案。
用例输入 1
abcaaea 4 1 7 c e 3 3 e b 3 6 b e 1 4 a c
用例输出 1
cbecaea
提示
【评测用例规模与约定】
- 对于 40% 的评测用例,∣s∣,m≤5000;
- 对于所有评测用例,1≤∣s∣,m≤105,1≤li≤ri≤∣s∣,xi=yi,其中 ∣s∣ 表示字符串 s 的长度。
蓝桥杯 2022 国赛 A 组 H 题(C 组 J 题)。
代码如下:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string s;
cin >> s;
int m;
cin >> m;
vector<pair<int, int>> ranges;
vector<char> replace_from, replace_to;
for (int i = 0; i < m; i++) {
int l, r;
char x, y;
cin >> l >> r >> x >> y;
ranges.push_back(make_pair(l, r));
replace_from.push_back(x);
replace_to.push_back(y);
}
for (int i = 0; i < m; i++) {
for (int j = ranges[i].first - 1; j <= ranges[i].second - 1; j++) {
if (s[j] == replace_from[i]) {
s[j] = replace_to[i];
}
}
}
cout << s << endl;
return 0;
}