主页 > 软件开发  > 

【华为OD机考】华为OD笔试真题解析(10)--字符串重新排序

【华为OD机考】华为OD笔试真题解析(10)--字符串重新排序
题目描述

给定一个字符串s,包含以空格分隔的若干个单词,请对s进行如下处理后输出:

单词内部调整:对每个单词字母重新按字典序排序;单词间顺序调整: 统计每个单词出现的次数,并按次数降序排列次数相同时,按单词长度升序排列次数和单词长度均相同时,按字典序升序排列

请输出处理后的字符串,每个单词以一个空格分隔。

输入描述

一行字符串,每个字符取值范围:[a-zA-Z0-9]以及空格,字符串长度范围:[1, 1000]。

输出描述

重新排序后的字符串,每个单词间隔1个空格,且首尾无空格。

示例描述 示例一

输入:

This is an apple

输出:

an is This aelpp 示例二

输入:

My sister is in the house not in the yard

输出:

in in eht eht My is not adry ehosu eirsst 解题思路 用空格分隔原始字符串,并用字典统计词频。使用sorted函数按次数降序、单词长度升序、按字典序升序排列。根据排序之后的字典,转换成字符串列表,注意单词需要按照词频进行重复记录。用join重新转成字符串并返回。 解题代码 from collections import defaultdict def solve_method(string): words = string.split() word_freqs = defaultdict(int) for word in words: rearrange_word = "".join(sorted(word)) word_freqs[rearrange_word] += 1 sorted_freqs = sorted(word_freqs.items(), key=lambda x: (-x[1], len(x[0]), x[0])) result = [] for (word, freqs) in sorted_freqs: result.extend([word] * freqs) result = " ".join(result) return result if __name__ == '__main__': assert solve_method("This is an apple") == "an is This aelpp" assert solve_method("My sister is in the house not in the yard") \ == "in in eht eht My is not adry ehosu eirsst"
标签:

【华为OD机考】华为OD笔试真题解析(10)--字符串重新排序由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【华为OD机考】华为OD笔试真题解析(10)--字符串重新排序