题意:给定两个字符串,求解是否可以对每个字符建立一个映射使得s可以转化为t
先用桶来统计个数,
之后我们发现如果可行的话,那么一定是在统计值相同的两个字符建立映射
对于所有的字符均有这些情况
那么将桶排序后,两个桶的序列一定是一样的,数值一一对应
代码如下:
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int cnt[30],bj[30];
char c[2][200];
int main(){
while(scanf("%s",c[0])==1){
scanf("%s",c[1]);
memset(cnt,0,sizeof(cnt));memset(bj,0,sizeof(bj));
int l0=strlen(c[0]),l1=strlen(c[1]);
for(int i=0;i<l0;++i){
cnt[c[0][i]-'A'+1]++;
}
for(int i=0;i<l1;++i){
bj[c[1][i]-'A'+1]++;
}
sort(cnt+1,cnt+26+1);sort(bj+1,bj+26+1);
bool flag=1;
for(int i=1;i<=26;++i){
if(cnt[i]!=bj[i]){
flag=0;break;
}
}
if(flag)printf("YES\n");
else printf("NO\n");
}
return 0;
}