华为OD机试题库《C++》限时优惠 9.9
华为OD机试题库《Python》限时优惠 9.9
华为OD机试题库《JavaScript》限时优惠 9.9
针对刷题难,效率慢,我们提供一对一算法辅导, 针对个人情况定制化的提高计划(全称1V1效率更高)。
看不懂有疑问需要答疑辅导欢迎私VX: code5bug
题目描述
给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出:
- 单词内部调整:对每个单词字母重新按字典序排序
- 单词间顺序调整:
- 统计每个单词出现的次数,并按次数降序排列
- 次数相同,按单词长度升序排列
- 次数和单词长度均相同,按字典升序排列
请输出处理后的字符串,每个单词以一个空格分隔。
输入描述
一行字符串,每个字符取值范围:[a-zA-z0-9]以及空格,字符串长度范围:[1,1000]
输出描述
输出处理后的字符串,每个单词以一个空格分隔。
示例1
输入:
This is an apple
输出:
an is This aelpp
示例2
输入:
My sister is in the house not in the yard
输出:
in in eht eht My is not adry ehosu eirsst
题解
本题属于字符串处理 + 哈希表统计 + 自定义多级排序问题。
解题思路
- 字符串预处理:将输入字符串按照空格拆分成单词。
- 单词内部排序:对每个单词的字母进行字典序排序。
- 统计频次:使用哈希表统计排序后的单词的出现次数。
- 排序逻辑:
- 优先按出现频率降序;
- 若频率相同,则按单词长度升序;
- 若频率和长度都相同,则按字典序升序。
- 结果拼接:按照排序后的顺序构造输出字符串。
Python
"""
@author: code5bug
"""
words = input().strip().split()
counter = {}
# 单词内部排序 + 频次统计
for word in words:
sorted_word = ''.join(sorted(word))
counter[sorted_word] = counter.get(sorted_word, 0) + 1
# 自定义排序:频次降序,长度升序,字典升序
sorted_items = sorted(counter.items(), key=lambda x: (-x[1], len(x[0]), x[0]))
# 构造结果
result = []
for word, count in sorted_items:
result.extend([word] * count)
print(' '.join(result))
希望这个专栏能让您熟练掌握算法, 🎁🎁🎁。
整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。🙏🙏🙏