这道题注意并不是固定变换,所以只要判断字符个数是否一样。
#include <stdio.h>
#include <algorithm>
#include <string.h>
#define clr( a ) memset ( a, 0, sizeof ( a ) )
const int maxn = 105, N = 26;
int cnt1[N], cnt2[N];
char str[maxn], ch[maxn];
int main ( )
{
int flag;
//重排和映射并不是固定,是自己定的
while ( ~ scanf ( "%s%s", str, ch ) )
{
flag = 1;
clr ( cnt1 );
clr ( cnt2 );
for ( int i = 0; str[i]; i ++ )
cnt1[ str[i]-'A' ] ++;
for ( int i = 0; ch[i]; i ++ )
cnt2[ ch[i]-'A' ] ++;
std :: sort ( cnt1, cnt1+N );
std :: sort ( cnt2, cnt2+N );
//所以只需要判断每个字符出现的次数是否一样
for ( int i = 0; i < N; i ++ )
if ( cnt1[i] != cnt2[i] )
flag = 0;
printf ( flag ? "YES\n" : "NO\n" );
}
return 0;
}