题意:
输入两个字符串,这两个字符串经过一定转换之后可以一样,怎么转换不知道,但是应该明白题意是让我们判断字每个字母出现的个数是否相同。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<memory.h>
int cmp(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
int main()
{
char a[105],b[105];
while(scanf("%s%s",a,b) != EOF)
{
int cnt1[28],cnt2[28];
memset(cnt1,0,sizeof(cnt1));
memset(cnt2,0,sizeof(cnt2));
int p1 = strlen(a);
int p2 = strlen(b);
for(int i = 0;i < p1; i++)
cnt1[a[i]-'A']++;
for(int i = 0;i < p2; i++)
cnt2[b[i]-'A']++;
qsort(cnt1,26,sizeof(cnt1[0]),cmp);
qsort(cnt2,26,sizeof(cnt2[0]),cmp);
int flag = 1;
for(int i = 0;i < 26; i++)
if(cnt1[i] != cnt2[i])
{
flag = 0;
break;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
用C++更方便:
#include<iostream>
using namespace std;
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<memory.h>
/*
int cmp(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
*/
int main()
{
char a[105],b[105];
while(scanf("%s%s",a,b) != EOF)
{
int cnt1[28],cnt2[28];
memset(cnt1,0,sizeof(cnt1));
memset(cnt2,0,sizeof(cnt2));
int p1 = strlen(a);
int p2 = strlen(b);
for(int i = 0;i < p1; i++)
cnt1[a[i]-'A']++;
for(int i = 0;i < p2; i++)
cnt2[b[i]-'A']++;
sort(cnt1,cnt1 + 26);
sort(cnt2,cnt2 + 26);
// qsort(cnt1,26,sizeof(cnt1[0]),cmp);
// qsort(cnt2,26,sizeof(cnt2[0]),cmp);
int flag = 1;
for(int i = 0;i < 26; i++)
if(cnt1[i] != cnt2[i])
{
flag = 0;
break;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}