【路飞】1. 根据字符出现频率排序 js实现

190 阅读1分钟

上题目:

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

示例 1:

输入: "tree"

输出: "eert"

解释: 'e'出现两次,'r'和't'都只出现一次。 因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。 示例 2:

输入: "cccaaa"

输出: "cccaaa"

解释: 'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。 注意"cacaca"是不正确的,因为相同的字母必须放在一起。 示例 3:

输入: "Aabb"

输出: "bbAa"

解释: 此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。 注意'A'和'a'被认为是两种不同的字符。

解题:

/**
 * @param {string} s
 * @return {string}
 */


var frequencySort = function (s) {
  	// 用来统计字符次数用
    let map = new Map();
    let res = '';
    for (let k = 0; k < s.length; k++) {
        map.set(s[k], (map.get(s[k]) || 0) + 1)
    }
  	// 排序,让字符多的在前面
    let arr = [...map].sort((a, b) => {
        return b[1] - a[1];
    });
  	// 字符串重组
    for (let i = 0; i < arr.length; i++) {
        while (arr[i][1] > 0) {
            res += arr[i][0];
            arr[i][1]--;
        }
    }
    return res;
};