【UVA-1339】Ancient Cipher【紫书】

【UVA-1339】Ancient Cipher【紫书】

问题链接:https://vjudge.net/problem/UVA-1339

Solution:

材料有些诱导性,这道问题要求简单来说就是:加密映射关系不确定,但保证加密字符时一一对应,之后字符顺序可以任意调整。那么判断方法就是将每种字符出现的次数都记录一下,之后将这个计数排个序,比较两个字符串得到的计数,如果相同则说明存在一种加密方式可以让两个字符串相同,输出YES。反之输出NO。

#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>

using namespace std;

const int LIM = 26;
int a[LIM], b[LIM];

int main(void) {
    ios::sync_with_stdio(false);
    string str;
    while (cin >> str) {
        int i;
        memset(a, 0, sizeof a);
        memset(b, 0, sizeof b);
        for (i = 0; i < str.size(); i++)
            a[str[i] - 'A']++;
        cin >> str;
        for (i = 0; i < str.size(); i++)
            b[str[i] - 'A']++;
        sort(a, a + LIM);
        sort(b, b + LIM);
        for (i = 0; i < LIM; i++)
            if (a[i] != b[i]) break;
        cout << (i == LIM ? "YES" : "NO") << endl;
    }
    return 0;
}