python - 为什么这种按字符频率代码排序的字符串不起作用?
问题描述
所以问题是:给定一个字符串,根据字符的频率按降序对其进行排序。
例如:“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))
解决方案
尝试以下操作:
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
推荐阅读
- homebrew - 为什么更新自制软件需要很长时间?
- javascript - 当我在 PDF-LIP 中使用阿拉伯语后者时出现错误,TypeError: font must be of type PDFFont or n, 但实际上是 NaN 类型
- firebase - Firebase 功能、冷启动和缓慢响应
- javascript - 无法通过单击列来取消对表格的排序 - Vue.js
- azure-active-directory - 通过 Azure IDP 对 SP 的 SAML 访问
- html - 如何在一个 canvasJS 图表中获取两个数据集的最小值/最大值
- python - 当不再满足 if 语句时,如何阻止 onkeypress 查找 keypress,即如何临时停用 onkeypress(我是新的)
- sql - 如果列值重复,则显示行
- sitemap - 指向同一站点的多个域的站点地图?
- python - 是否可以在 GitPython 中模拟“git add -A”?