根据字符出现频率排序

🎯 问题描述(来源于LeetCode)

描述
给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。
返回 已排序的字符串 。如果有多个答案,返回其中任何一个。
说明

  • 1 <= s.length <= 5 * 105
  • s 由大小写英文字母和数字组成

示例

  • 示例 1:
1
2
3
4
**输入:** s = "tree"
**输出:** "eert"
**解释:** 'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
  • 示例 2:
1
2
3
4
输入: s = "Aabb"
输出: "bbAa"
解释: 此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。
注意'A'和'a'被认为是两种不同的字符。

💻 解题思路

思路1:优先队列

思路1:代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def frequencySort(self, s: str) -> str:
mapd={}
for x in s:
if x in mapd:
mapd[x]+=1
else:
mapd[x]=1
result=[]
result1=[]
for x,freq in mapd.items():
heapq.heappush(result,(-freq,x))
while result:
cnt,ch=heappop(result)
result1.append(ch*(-cnt))
return ''.join(result1)

思路1:📊 性能分析

提交结果
  • 运行时间:15ms击败33.33%
  • 内存消耗:20.17MB击败35.53%
复杂度验证
  • 时间复杂度:O(nlogn)O(nlogn)
  • 空间复杂度:O(n)O(n)

思考