UVA

/*
  这题的关键是,既然可以一一映射,只要统计字符串中每个字母的出现次数并比较
  
  也就是说,只要a串中的每一个次数,都能找到b串的一个次数和它相等即可
  (但要注意不可重复,也就是说,a串中只有2个字母出现50次,b串也要恰好2个字母出现50次,不能多也不能少)
  
  ...至于到底是哪个字母出现50次,既然可以映射,哪个字母就不重要了,我们不需要关心这点...
*/


#include <iostream>
#include <cstring>
#include <algorithm>
const int maxn = 110;
const int check = 26;
using namespace std;
char a[maxn], b[maxn];
int na[check], nb[check];

int main()
{
	while (cin >> a >> b)
	{
		int len = strlen(a);
		//na和nb每次用前都要先清零,这点十分重要!!!
		memset(na, 0, sizeof(na));
		memset(nb, 0, sizeof(nb)); 
		for (int i = 0; i < len; i++)
		{
			na[a[i] - 'A']++;
			nb[b[i] - 'A']++;
		}
		
		sort(na, na+check);
		sort(nb, nb+check);
		bool flag = true;
		
		for (int i = 0; i < check; i++)
		{
			if (na[i] != nb[i])
			{
				flag = false;
				break;
			}
		}
		
		if (flag) cout << "YES" << endl;
		else cout << "NO" << endl;
			
	}
	return 0;
}


原文地址:https://www.cnblogs.com/mofushaohua/p/7789528.html