[路飞]_根据字符出现频率排序

252 阅读1分钟

451. 根据字符出现频率排序

题目

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

示例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
}