要点:
思路比较难想到,因为字母可以重排,则每个字母的位置不重要,重要的每个字母出现的次数,统计每个字母出现的次数,得到两个数组cnt1[26]和cnt2[26],将两个数组分别快排,若结果相同,则说明两个字符串中对应字符数目相同(对应什么字符不要紧,可以一一映射转换)
#include<stdio.h>
#include<string.h>
int cmp(const void*a, const void*b)
{
return *(int*)a - *(int*)b;
}
int main()
{
char s[9] = { 'A','B','C','D','E','F','G','H','I' };//简略表示
char c1[100], c2[100];
int cnt1[9] = {0};
int cnt2[9] = {0};
scanf("%s%s", c1,c2);
int m = strlen(c1);
for (int i = 0; i < m; i++)
for (int j = 0;j < 9; j++)
{
if (c1[i] == s[j])
cnt1[j]++;
if (c2[i] == s[j])
cnt2[j]++;
}
qsort(cnt1, 9, sizeof(cnt1[0]), cmp);
qsort(cnt2, 9, sizeof(cnt2[0]), cmp);
int n;
for (n = 0; n < 9; n++)
{
if (cnt1[n] != cnt2[n])
break;
}
if (n == 9) printf("YES\n");
else printf("NO\n");
return 0;
}
学习心得:
1.复习了一下快排,编译通过但懒得去过oj了