题目大意:
找到一个映射 使得两个字符串相同如果可以找到输出YES,反之输出NO
思路:
刚开始以为一定要按顺序一一对应,发现第一组数据答案是错的,后来才知道不一定要按照顺序。 那么只需要计算每个字母的个数,比较字母个数是否一样如果全部一样就可以找得到映射。
代码:
#include <iostream>
using namespace std;
#include <stdio.h>
#include <cstring>
#include <map>
#include <algorithm>
map<char,char> m;
char s[1010],str[1010];
int count1[1010],count2[1010];
int main() {
while(scanf("%s",s)!=EOF) {
// m.clear();
// memset(flag,'\0',sizeof(flag));
memset(count1,0,sizeof(count1));
memset(count2,0,sizeof(count2));
scanf("%s",str);
int len = strlen(s);
for(int i = 0; i < len; i++)
count1[s[i] - 'A']++;
for(int i= 0; i < len; i++)
count2[str[i] - 'A']++;
sort(count1,count1 + 26);
sort(count2,count2 + 26);
int k;
for( k = 0 ; k < 26; k++)
if(count1[k] != count2[k])
break;
/* for(i = 0; i < len; i++) {
if(flag[s[i] - 'A'] == '\0')
flag[s[i] - 'A'] = str[i];
else if(flag[s[i] - 'A'] != str[i])
break;*/
// cout << flag[s[i]];
// if(flag[s[i]] == '\0')
// flag[s[i]] = str[i];
// else
// break;
if(k >= 26)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}