如何按A到Z的字符出现频率优先级对字符串列表进行排序
实现思路
我们的排序需求本质是按A~Z的字符出现次数依次降序排列,且优先比较靠前的字母(A优先级最高,其次B,以此类推)。因为题目明确不存在变位词,所以不需要处理两个字符串26个字母计数完全相等的情况。
核心实现逻辑是为每个字符串生成一个26位的排序特征元组,元组的第i位对应第i个字母(i=0对应A、i=1对应B...i=25对应Z)在字符串中的出现次数,利用语言内置的元组/数组按位比较的特性,直接实现优先级排序。
代码实现(Python)
def sort_by_letter_frequency(words): def get_sort_key(word): # 统一转小写,不区分大小写统计,如果需要区分大小写可删除此行,直接统计大写字母 lower_word = word.lower() # 生成A~Z的出现次数元组 return tuple(lower_word.count(chr(ord('a') + idx)) for idx in range(26)) # 按特征元组降序排序,次数越高越靠前 return sorted(words, key=get_sort_key, reverse=True) # 测试示例 input_words = ["Banana", "Isle", "Best", "Barb"] print(sort_by_letter_frequency(input_words)) # 输出:['Banana', 'Barb', 'Best', 'Isle']
其他语言通用实现逻辑
如果使用其他编程语言,可参照如下步骤:
- 遍历所有待排序字符串,为每个字符串生成长度为26的计数数组,按顺序存储A~Z的出现次数
- 自定义排序比较函数:
- 依次比较两个字符串计数数组的每一位(从第0位到第25位)
- 如果某一位的计数值不等,计数值更大的字符串排在前面
- 如果所有位都相等(题目已排除该情况),可按原字符串字典序排序
注意事项
如果需求要求区分字符大小写,只需要去掉转小写/大写的步骤,单独统计大写A~Z的出现次数即可。
内容的提问来源于stack exchange,提问作者Joe Goldberg
相关产品推荐
相关产品推荐

