本题是一道模拟题目。
题目给定一系列的替换规则以及最终的字符串,要求解题者按照规则替换字符串,显然,对于每个字符逐一根据规则逆向还原会超时,因此需要考虑更高效的方法。
考虑到是按照顺序逆向应用规则,那么只需确定在最终给出的字符串中 A-Z
的字母所对应的字母即可,也就是说,根据规则,反向确定 A-Z
这
26
26
26 个大写字母在逆向应用规则后与哪个字母相对应,确定对应关系后,则可以直接输出。
注意,不需要考虑替换结果的逻辑性,因为本题并不存在合理的逻辑。
参考代码:
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char *argv[]) {
cin.tie(0), cout.tie(0), ios::sync_with_stdio(false);
int T; cin >> T;
while (T--) {
string s;
int n, mp[128];
for (int i = 0; i < 128; i++) mp[i] = i;
cin >> s >> n;
for (int i = 0; i < n; i++) {
char a, b;
cin >> a >> b;
for (int i = 65; i <= 90; i++)
if (mp[i] == b)
mp[i] = a;
}
for (auto c : s) cout << (char)mp[c];
cout << '\n';
}
return 0;
}