题目不难,但是思路方面还是很巧妙,要注意一点,本题字母之间的映射关系并不一定是一样的,例如若 B 对应 A,那也不表明 C 就对应 B,还有一点,写代码时因为粗心,写了两遍memset(na,0,sizeof(na));而丢了memset(nb,0,sizeof(nb)); 导致输出一直有问题,看了好久才发现的,这种低级错误以后要尽量避免。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int i,j,t,r,la,c,lb,lan,lbn;
char a[101],b[101];
int na[101]={0},nb[101]={0};
while( gets(a) != NULL && gets(b) != NULL )
{
la=strlen(a); lb=strlen(b);
for(i=0; i<la; i++)
{
for(c=65; c<=90; c++)
{
if(a[i] == c)
{
na[c-65]++;
break;
}
}
}
for(i=0; i<lb; i++)
{
for(c=65; c<=90; c++)
{
if(b[i] == c)
{
nb[c-65]++;
break;
}
}
}
for(i=1; i<=25; i++)
{
for(j=0; j<26-i; j++)
if(na[j] > na[j+1])
{
t=na[j];
na[j]=na[j+1];
na[j+1]=t;
}
}
for(i=1; i<=25; i++)
{
for(j=0; j<26-i; j++)
if(nb[j] > nb[j+1])
{
t=nb[j];
nb[j]=nb[j+1];
nb[j+1]=t;
}
}
t=1;
for(i=0; i<=25; i++)
if(na[i] != nb[i])
t=0;
if(t==1)
printf("YES\n");
else
printf("NO\n");
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(na,0,sizeof(na));
memset(nb,0,sizeof(nb));
}
return 0;
}