POJ 2159 (Ancient Cipher)

来源:互联网 发布:安全优化版和官方原版 编辑:程序博客网 时间:2024/05/01 15:42
//大意是判断两个字符序列是否可以通过字符替换(substitution )和交换(permutation)变成对方。
//替换的方法是不同的。不一定按题目的替换方法,只要被替换字母与替换字母是唯一的映射就可以了。
//初看似乎需要穷举所有substitution和permutation序列,但细想后发现:
//1.permutation让序列不用考虑顺序问题,可以看作是两个字符集合,题目简化为判断两个字符集合是否可通过substitution得到。
//2.substitution是任意的,只要两个序列中两个字符出现的次数相同,就可以替换。
//如果整个集合A中的字符都能在集合B中找到出现次数相同的字符,则A和B可以通过substitution得到。

//思路:分别对两个串的中各个字母的个数统计好后,分别放在a, b中,再排序一下。只要两个a, b两个数组完全一样就可以了。(a, b大小是26,刚好26个字母)
#include<iostream>
#include<algorithm>
using namespace std;
char t1[26], t2[26], s[101];
int main(void)
{
    cin >> s;
    for (int i = 0; s[i]; i++)  t1[s[i] - 'A']++;
    cin >> s;
    for (int i = 0; s[i]; i++) t2[s[i] - 'A']++;
    sort(t1, t1 + 26);
    sort(t2, t2 + 26);
    for (int i = 0; i < 26; i++)
    {
        if (t1[i] != t2[i])
        {
            cout << "NO\n";
            return 0;
        }
    }
    cout << "YES\n";
    return 0;
}
原创粉丝点击