根据字符出现频率排序
一、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;
};
结果
关于我
- decs: 19年毕业的前端开发一枚,沉迷Js
- E-mail: [email protected]
- 个人博客: CSDN
- GitHub: 传送门