LeetCode題解:451.根據字符出現頻率排序

根據字符出現頻率排序

一、LeetCode題解

瞧一瞧(求star!)

二、算法題

題目

給定一個字符串,請將字符串裏的字符按照出現的頻率降序排列。

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

結果

在這裏插入圖片描述

關於我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章