【よくわかる解説!】ABC342 C問題 〜変換をまとめる〜

ABC

解説動画はこちら!

コード

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, n) for (int i = 0; i < (n); ++i)

// POINT: 変換の処理を最初に整理する
// アルファベット順で'a'から数えた数で管理をする
//  例: 'a': 0, 'b': 1, 'c': 2, ... , 'r': 17, ... , 'z': 25

int main() {
    int n;
    cin >> n;
    string s;
    cin >> s;

    vector convert(26);
    rep(i, 26) convert[i] = i;

    int q;
    cin >> q;
    rep(i, q) {
        char c, d;
        cin >> c >> d;

        int cIndex = c - 'a';
        int dIndex = d - 'a';

        rep(j, 26) {
            if (convert[j] == cIndex) convert[j] = dIndex;
        }
    }
    // for (int i = 0; i < 26; i++) {
    //     cout << i << " " << convert[i] << endl;
    // }

    for (int i = 0; i < s.size(); i++) {
        cout << char(convert[s[i] - 'a'] + 'a');
    }

    return 0;
}

コメント