描述:
输入一个只包含小写英文字母和数字的字符串,按照不同字符统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出。
数据范围:字符串长度满足 1≤len(str)≤1000
输入描述:
一个只包含小写英文字母和数字的字符串。
输出描述:
一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。
示例:
输入:aaddccdc
输出:cda
说明:样例里,c和d出现3次,a出现2次,但c的ASCII码比d小,所以先输出c,再输出d,最后输出a.
解法可太粗糙了,可优化的地方太多,但总体主要还是哈希的思想:
#include<stdio.h>
#include<string.h>
#define MAX 1000
int main() {
char str[MAX] = {};
int hash_arr[80] = {0}; // 存储字符出现次数
char hash_str[80] = {}; // 存储对应的字符
scanf("%[^\n]\n", str);
int i, temp = 0;
for (i = 0; i < strlen(str); i++) {
hash_arr[str[i]-'0']++;
hash_str[str[i]-'0'] = str[i];
}
int count = 0, index = 0;
for (i = 0; i < 80; i++) {
for (int j = 0; j < 80; j++) {
if (count < hash_arr[j]) {
count = hash_arr[j];
index = j;
}
}
if (hash_arr[index] > 0) {
printf("%c", hash_str[index]);
hash_arr[index] = 0;
hash_str[index] = '\0';
count = 0;
}
}
printf("\n");
return 0;
}