Skip to content

Latest commit

 

History

History
79 lines (62 loc) · 2.37 KB

File metadata and controls

79 lines (62 loc) · 2.37 KB

https://leetcode-cn.com/problems/sort-characters-by-frequency/solution/451gen-ju-zi-fu-chu-xian-pin-lu-pai-xu-p-i9xu/

难度:中等

题目

给定一个字符串,请将字符串里的字符按照出现的频率降序排列。

示例

示例 1:
输入:
"tree"
输出:
"eert"
解释:
'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。

示例 2:
输入:
"cccaaa"
输出:
"cccaaa"
解释:
'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。
注意"cacaca"是不正确的,因为相同的字母必须放在一起。

示例 3:
输入:
"Aabb"
输出:
"bbAa"
解释:
此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。
注意'A'和'a'被认为是两种不同的字符。

分析

当python小伙伴们看到出现次数,别想了,导模块Counter做Hash计数吧!

  1. 导入模块from collections import Counter(当然在Leetcode中,这些内置的模块会默认导入,不写也OK)
  2. 我们通过hash表记录了每个字符串出现的次数
  3. 使用sorted按照出现次数进行倒序排列
  4. 然后Python中字符串乘以数字就是复制效果比如: 'a' * 3 == 'aaa'
  5. 最后将列表join起来就行了

基础解题

class Solution:
    def frequencySort(self, s):
        li = []
        for i, j in Counter(s).items():
            li.append([i, j])
        new_li = sorted(li, key=lambda x: -x[1])
        return ''.join([i * j for i,j in new_li])

一行代码解题

class Solution:
    def frequencySort(self, s):
        return ''.join([i*j for i, j in sorted([[i, j] for i, j in Counter(s).items()], key=lambda x: -x[1])])

欢迎关注我的公众号: 清风Python,带你每日学习Python算法刷题的同时,了解更多python小知识。

有喜欢力扣刷题的小伙伴可以加我微信(King_Uranus)互相鼓励,共同进步,一起玩转超级码力!

我的个人博客:https://qingfengpython.cn

力扣解题合集:https://github.com/BreezePython/AlgorithmMarkdown