欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

UVA - 1339 Ancient Cipher

程序员文章站 2022-04-02 10:06:08
...
/*
  这题的关键是,既然可以一一映射,只要统计字符串中每个字母的出现次数并比较
  
  也就是说,只要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;
}