题意:两个长度为n的字符串,判断他们之间字母能否一一对应,即做一个一一映射后两个字符串是否相同。
方法:虽然不一定映射哪一个,但是必定映射一个,统计他们出现的次数,排序。相同则YES。。想了好半天,看别人的代码才明白啥意思,代码很简单。
#include <iostream>
#include <iomanip>
#include <string>
#include <cstring>
#include <cstdio>
#include <queue>
#include <stack>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 105;
char str[N];
int vis1[26], vis2[26];
bool judge() {
for (int i = 0; i < 26; i ++)
if (vis1[i] != vis2[i])
return false;
return true;
}
int main()
{
#ifdef Local
freopen("a.in", "r", stdin);
#endif
while (cin >> str)
{
memset(vis1, 0, sizeof(vis1));
memset(vis2, 0, sizeof(vis2));
for (int i = 0; i < strlen(str); i ++)
vis1[str[i] - 'A'] ++;
sort(vis1, vis1 + 26);
cin >> str;
for (int i = 0; i < strlen(str); i ++)
vis2[str[i] - 'A'] ++;
sort(vis2, vis2 + 26);
if (judge())
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}