题目
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
示例1
输入:
"tree"
输出:
"eert"
解释:
'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
题解
哈希表+全排序
- 统计字符串所有字符出现的次数,将数据放入map
- 枚举map,将数据放入二维数组list中
- 对list全排序
- 枚举list通过出现的次数重新构建字符串
- 返回结果
代码
var frequencySort = function (s) {
const map = {}
for (let i = 0; i < s.length; i++) {
const k = s[i]
map[k] = (map[k] || 0) + 1
}
const list = Object.keys(map).map((k) => [k, map[k]])
list.sort((a, b) => b[1] - a[1])
let result = ''
for (let i = 0; i < list.length; i++) {
const [k, n] = list[i]
result += Array(n).fill(k).join('')
}
return result
}