题目
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
示例 1:
输入:
"tree"
输出:
"eert"
解释:
'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
来源:力扣(LeetCode)leetcode-cn.com/problems/so…
解题思路
- 通过 Map 统计字符出现次数;
- 将字符次数入大顶堆 MaxPriorityQueue;
- 将堆中有序的元素反向生成字符串;
代码实现
var frequencySort = function(s) {
//统计字符出现次数
const map = new Map()
for (const c of s) {
map.set(c, map.has(c) ? map.get(c) + 1 : 1)
}
//将字符次数入大顶堆
const maxQueue = new MaxPriorityQueue()
for ([key, value] of map) {
maxQueue.enqueue(key, value)
}
//将堆中有序的元素反向生成字符串
let ans = ''
while(!maxQueue.isEmpty()) {
const { element, priority } = maxQueue.dequeue()
ans += new Array(priority).fill(element).join('')
}
return ans
};
如有错误欢迎指出,欢迎一起讨论!