难度:中等
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
示例 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计数吧!
- 导入模块
from collections import Counter(当然在Leetcode中,这些内置的模块会默认导入,不写也OK) - 我们通过hash表记录了每个字符串出现的次数
- 使用sorted按照出现次数进行倒序排列
- 然后Python中字符串乘以数字就是复制效果比如:
'a' * 3 == 'aaa' - 最后将列表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
