首页 > 解决方案 > 为什么这种按字符频率代码排序的字符串不起作用?

问题描述

所以问题是:给定一个字符串,根据字符的频率按降序对其进行排序。

例如:“tree”返回:“eert”或“eetr”都是有效答案

所以我的想法是创建一个计数器来保存频率数字,然后按频率排序,以相反的顺序。但是,它并没有通过所有测试用例。例如,它适用于“tree”,但不适用于“longeststringhere”,返回“eeengststrngrloih”,这不是一个有效的答案,因为所有相同的字符必须组合在一起。关于为什么我的代码不起作用的想法......?

代码:

class Solution:
    def frequencySort(self, s: str) -> str:
        freq = collections.Counter(s)
        return "".join(sorted(list(s), key = lambda x: freq[x], reverse = True))

标签: pythonsorting

解决方案


尝试以下操作:

def frequencySort(self, s: str) -> str:
    freq = collections.Counter(s)
    sorted_by_value = dict(sorted(freq.items(), key=lambda item: item[1], reverse=True))
    return''.join([char * freq[char] for char in sorted_by_value])

首先,我们得到每个字符出现的次数:

freq = collections.Counter(s)

然后我们按值排序

sorted_by_value = dict(sorted(freq.items(), key=lambda item: item[1], reverse=True))

最后,我们遍历每个字符(映射的键)并重复该字符“值”次,然后将所有内容组合成一个字符串:

return''.join([char * freq[char] for char in sorted_by_value])

输出:

eeennggssttrrloih

推荐阅读