这一题的主要思路,很简单,对两个字符串都排序,对第一个字符串映射,再比较下两个字符串是否相等,相等输出YES 否则输出NO;
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return *(char*)a-*(char*)b;
}
int cmp1(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
} //两个qsort的cmp函数,为了两个字符串排序。
int main()
{
char a[110],b[110];
int i,j;
while(~scanf("%s%s",a,b))
{
int lena,lenb,c[26],d[26],k=-1,k1=-1,f;
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
lena=strlen(a);
lenb=strlen(b);
if(lena!=lenb) printf("NO\n");//长度不等,直接排除
qsort(a,lena,sizeof(a[0]),cmp);
qsort(b,lenb,sizeof(b[0]),cmp);//排序
for(i=0;i<lena;i++)
{
if(a[i]==a[i-1])
c[k]+=1;
else if(a[i]!=a[i-1])
{
k++;
c[k]+=1;
}
if(b[i]==b[i-1])
d[k1]+=1;
else if(b[i]!=b[i-1])
{
k1++;
d[k1]+=1;
}
} //k1和k分别为两个字符串的里的种类个数
qsort(c,k+1,sizeof(c[0]),cmp1);
qsort(d,k1+1,sizeof(d[0]),cmp1);
if(k1!=k) printf("NO\n");//种类个数不同直接排除
else
{
f=0;
for(i=0;i<=k;i++)
{
if(c[i]!=d[i])
{
f=1;
break;//有一个种类的单体数量不等,直接break,排除;
}//每个种类的单体个数是否相等
}
if(f==0) printf("YES\n");//全部都相等
else printf("NO\n");//有一个不等或者多个不等
}
}
}