全球电子商务网站排名,做网站策划的工具,wordpress设置用户头像,成都圣都装饰装修公司题目描述
给定一个字符串s#xff0c;s包括以空格分隔的若干个单词#xff0c;请对s进行如下处理后输出#xff1a; 1、单词内部调整#xff1a;对每个单词字母重新按字典序排序 2、单词间顺序调整#xff1a; 1#xff09;统计每个单词出现的次数#xff0c;并按次数降…题目描述
给定一个字符串ss包括以空格分隔的若干个单词请对s进行如下处理后输出 1、单词内部调整对每个单词字母重新按字典序排序 2、单词间顺序调整 1统计每个单词出现的次数并按次数降序排列 2次数相同按单词长度升序排列 3次数和单词长度均相同按字典升序排列
请输出处理后的字符串每个单词以一个空格分隔。
输入描述 一行字符串每个字符取值范围[a-zA-z0-9]以及空格字符串长度范围[11000]
输出描述 输出处理后的字符串每个单词以一个空格分隔。
用例
输入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说明无
单词处理与排序算法详解
核心解题思路
本题需要对字符串中的单词进行双重处理单词内部字符排序和单词间多重排序。解题关键在于
单词内部处理对每个单词的字符重新按字典序排序单词间排序按照三重规则排序 规则1按单词出现频率降序排列规则2频率相同则按单词长度升序排列规则3长度相同则按字典序升序排列
处理流程
分割字符串将输入字符串按空格分割成单词列表单词内部排序对每个单词的字符进行字典序排序统计频率计算每个处理后的单词出现次数多重排序按照三重规则对单词列表排序结果拼接将排序后的单词用空格连接
完整代码实现
def process_string(s):# 1. 分割字符串为单词列表words s.split()# 2. 对每个单词内部字符排序sorted_words []for word in words:# 将单词转为字符列表排序后重新组合sorted_word .join(sorted(word))sorted_words.append(sorted_word)# 3. 统计处理后的单词频率from collections import Counterword_freq Counter(sorted_words)# 4. 多重排序频率降序 长度升序 字典序升序# 使用元组作为排序键(-频率, 长度, 单词)sorted_list sorted(sorted_words,keylambda word: (-word_freq[word], len(word), word))# 5. 拼接最终结果return .join(sorted_list)# 主程序
if __name__ __main__:input_str input().strip()output process_string(input_str)print(output)算法原理解析
1. 单词内部排序
sorted_word .join(sorted(word))sorted(word)将单词拆分为字符列表并按ASCII值排序.join()将排序后的字符重新组合为字符串示例 “apple” → [‘a’,‘p’,‘p’,‘l’,‘e’] → 排序为[‘a’,‘e’,‘l’,‘p’,‘p’] → “aelpp”“This” → [‘T’,‘h’,‘i’,‘s’] → 排序为[‘T’,‘h’,‘i’,‘s’] → “This” (已有序)
2. 频率统计
from collections import Counter
word_freq Counter(sorted_words)Counter类高效统计单词出现次数返回字典{单词: 出现次数}示例对于输入[“in”, “eht”, “in”] → 频率统计为{‘in’:2, ‘eht’:1}
3. 多重排序
keylambda word: (-word_freq[word], len(word), word)第一关键字-word_freq[word] 负号实现降序效果频率越高负值越小示例频率2变为-2频率1变为-1-2 -1 → 频率2排在前面 第二关键字len(word) 按单词长度升序排列长度短的单词排在前面 第三关键字word 按字典序升序排列字典序小的单词排在前面按字符ASCII值比较
示例解析
示例1输入This is an apple 单词内部排序 “This” → “This”字符已有序“is” → “is”“an” → “an”“apple” → “aelpp” 频率统计 所有单词出现1次 多重排序 频率相同 → 比较长度长度“an”(2)、“is”(2) “This”(4) “aelpp”(5)an和is长度相同 → 比较字典序“an” “is”‘a’(97) ‘i’(105) 最终排序 [“an”, “is”, “This”, “aelpp”]输出“an is This aelpp”
示例2输入My sister is in the house not in the yard 单词内部排序 “My” → “My”“sister” → “eirsst”“is” → “is”“in” → “in”两次“the” → “eht”两次“house” → “ehosu”“not” → “not”“yard” → “adry” 频率统计 “in”:2, “eht”:2, 其他单词:1 多重排序 频率降序in和eht优先频率2 1长度升序 “in”(2) “eht”(3)长度短的在前其他单词(“My”:2, “is”:2) “not”:3 “adry”:4 “ehosu”:5 “eirsst”:6 字典序升序 in和eht内部相同“My” “is”‘M’(77) ‘i’(105) 最终排序 [“in”,“in”,“eht”,“eht”,“My”,“is”,“not”,“adry”,“ehosu”,“eirsst”]输出“in in eht eht My is not adry ehosu eirsst”
总结
实际应用
文本分析词频统计与排序数据清洗统一单词格式搜索引擎搜索结果排序自然语言处理词汇规范化日志分析高频事件识别
通过这个解法初学者可以掌握
字符串操作的核心技巧多重排序的实现方法频率统计的高效方式复杂问题的分解思路Python内置函数的灵活应用
这种分治排序的方法是处理字符串排序问题的通用模式理解后可以扩展到更复杂的文本处理场景中。