文章目录
- 🎯 前言
- 🎯 题目描述
- 🎯 解题思路
- 📙 Python代码实现
- 📗 Java代码实现
- 📘 C语言代码实现
🎯 前言
🏆 《华为机试真题》专栏含2023年牛客网面经、华为面经试题、华为OD机试真题最新试题。
🏆 华为机试有三道题,第一道和第二道属于简单题,分值为100分,第三道为困难题,分值为200分,总分400分,150分钟考试时间。
🏆 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议!
🎯 题目描述
输入一个只包含小写英文字母和数字的字符串,按照不同字符统计 数由多到少输出统计结果,如果统计的个数相同,则按照ASCI码由小到大排序输出。
数据范围:字符串长度满足 1<=len(str)<=1000。
输入描述:
一个只包含小写英文字母和数字的字符串。
输出描述:
一个字符串,为不同字母出现次数的降序表示。
若出现次数相同,则按ASCII码的升序输出。
🎯 解题思路
题目要求按照不同字符统计次数,并按照次数从多到少输出,如果次数相同,则按照字符ASCII码从小到大输出。可以参考以下步骤实现:
- 首先,统计每个字符出现的次数,可以使用一个字典来存储,key为字符,value为出现的次数;
- 然后,按照出现次数从多到少排序,可以使用一个列表来存储结果,每个元素是一个元组,第一个元素是字符,第二个元素是出现的次数;
- 如果出现次数相同,按照字符ASCII码从小到大排序。需要定义一个比较器函数(可以使用lambda表达式),按照题目要求排序;
- 最后,遍历排序后的列表,按照题目要求输出结果。
📙 Python代码实现
s = input().strip()# 统计字符出现次数
cnt = {}
for c in s:cnt[c] = cnt.get(c, 0) + 1# 按照出现次数和字符ASCII码排序
result = sorted(cnt.items(), key = lambda x: (-x[1], ord(x[0])))# 输出结果
for c, t in result:print(c, t)
📗 Java代码实现
import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String s = scanner.nextLine().trim();// 统计字符出现次数Map cnt = new HashMap < > ();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);cnt.put(c, cnt.getOrDefault(c, 0) + 1);}// 按照出现次数和字符ASCII码排序List > list = new ArrayList < > (cnt.entrySet());Collections.sort(list, new Comparator > () {@Overridepublic int compare(Map.Entry o1, Map.Entry o2) {if (o1.getValue() != o2.getValue()) {return o2.getValue() - o1.getValue();} else {return o1.getKey() - o2.getKey();}}});// 输出结果for (Map.Entry entry: list) {System.out.println(entry.getKey() + " " + entry.getValue());}}
}
📘 C语言代码实现
#include
#include
#include#define MAXN 1000int cmp(const void * a,const void * b) {char x = * ((char * ) a), y = * ((char * ) b);if (cnt[x] != cnt[y]) {return cnt[y] - cnt[x];} else {return x - y;}
}int main() {char s[MAXN + 1];fgets(s, MAXN + 1, stdin);int n = strlen(s) - 1;// 统计字符出现次数memset(cnt, 0, sizeof(cnt));for (int i = 0; i < n; i++) {char c = s[i];cnt[c] ++;}// 按照出现次数和字符ASCII码排序char chars[MAXN];for (int i = 0; i < n; i++) {chars[i] = s[i];}qsort(chars, n, sizeof(char), cmp);// 输出结果for (int i = 0; i < n; i++) {if (i > 0 && cnt[chars[i]] == cnt[chars[i - 1]]) {continue;}printf("%c %d\n", chars[i], cnt[chars[i]]);}return 0;
}
📭 本专栏包含了最新最全的2023年 华为OD机试真题,有详细的分析和解答。