LeetCode题解:451.根据字符出现频率排序

根据字符出现频率排序

一、LeetCode题解

瞧一瞧(求star!)

  • LeetCode题解Javascript版本:Gitbook版本传送门
  • LeetCode题解Javascript版本:CSDN传送门
  • 前端进阶笔记:Gitbook传送门

二、算法题

题目

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

示例 1:

输入:
"tree"

输出:
"eert"

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

解法一 (Map)

思路

  • 统计字母出现的次数
  • 按次数进行排序

代码

var frequencySort = function (s) {
    let index = 0;
    let count = 1;

    let result = '';

    const map = new Map();

    while (index < s.length) {
        const char = s.charAt(index);

        // 若已存在,则在原来的计数基础上 +1,否则是新的字符
        map.has(char) ? map.set(char, map.get(char) + 1) : map.set(char, count);

        index++;
    }

    // 按 key - value 的 value 也就是 count 个数,以降序排列
    const sortMap = [...map].sort((a, b) => b[1] - a[1]);

    // 重复字符,累加:sortMap = ["字符", "个数"]
    sortMap.map((item) => (result += item[0].repeat(item[1])));

    return result;
};

结果

LeetCode题解:451.根据字符出现频率排序_第1张图片

关于我

  • decs: 19年毕业的前端开发一枚,沉迷Js
  • E-mail: [email protected]
  • 个人博客: CSDN
  • GitHub: 传送门

你可能感兴趣的:(#,LeetCode题解系列)