JS Leetcode 451. 根据字符出现频率排序题解分析
壹 ❀ 引
大前天做的一道题,昨天发版到11点,前天聚餐,一直没时间整理,今天下班闲来无事,还是做个简单思路整理。本题来自LeetCode 451. 根据字符出现频率排序,难度中等,其实整理下思路,其实并不算难,题目描述如下:
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
示例 1:
输入:
"tree" 输出:
"eert" 解释:
'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
示例 2:
输入:
"cccaaa" 输出:
"cccaaa" 解释:
'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。
注意"cacaca"是不正确的,因为相同的字母必须放在一起。
示例 3:
输入:
"Aabb" 输出:
"bbAa" 解释:
此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。
注意'A'和'a'被认为是两种不同的字符。
贰 ❀ 题解分析
题意很简单,给定一个字符串,请统计字符串中每种字符出现的次数,并按照由高到低的顺序重组字符并返回,比如tree可以返回为eetr或者eert,也就是说出现次数相同的字符不用考虑先后顺序,前面两种答案均符合条件。
直观思路其实很简单,统计每个字符出现的次数,比如't:1','r:1','e:2',然后对其进行排序,数字越高的在前面,最后我们再进行字符重组,比如e有2个,因此相加2次,依次操作得到最终字符。
那么问题就来了,我们使用什么数据结构来统计字符的次数呢?直觉可能想到的是对象,比如:
let map = {
t:1,
r:1,
e:2
}
望着统计完成后对象,排序又成了问题....倒不是不能排,而是有点麻烦。所以思考了下,还是选用map结构,理由是我们可以通过...直接将map转为数组,方便一点,本来以为是暴力解法,最后看了下大家的思路,都大同小异,其实还击败了九十多的人,贴下代码:
/**
* @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;
};
其实这里有个代码简写的优化点,我最初对于判断map中是否包含了某个字符,没有设置为1,有则加1的写法是这样:
if (map.get(s[k])) {
map.set(s[k], map.get(s[k]) + 1)
} else {
map.set(s[k], 1);
}
其实通过||可以简化成一句,有就以前面的值为准加1,没有则取0加1作为最初的值,相当人性化,那么就记录到这里了。
JS Leetcode 451. 根据字符出现频率排序题解分析的更多相关文章
- Java实现 LeetCode 451 根据字符出现频率排序
451. 根据字符出现频率排序 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e ...
- Leetcode 451.根据字符出现频率排序
根据字符出现频率排序 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e'出现两次 ...
- leetcode.排序.451根据字符出现频率排序-Java
1. 具体题目 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e'出现两次,'r ...
- [LeetCode] 451. Sort Characters By Frequency 根据字符出现频率排序
Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...
- LeetCode 451. Sort Characters By Frequency (根据字符出现频率排序)
Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...
- [LeetCode] Sort Characters By Frequency 根据字符出现频率排序
Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...
- 451 Sort Characters By Frequency 根据字符出现频率排序
给定一个字符串,请将字符串里的字符按照出现的频率降序排列.示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次.因此' ...
- 【LeetCode】451-根据字符出现频率排序
题目描述 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e'出现两次,'r'和' ...
- [Swift]LeetCode451. 根据字符出现频率排序 | Sort Characters By Frequency
Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...
- 给定一个字符串,根据字符出现频率排序--Java实现
题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入:"tree" 输出:"eert" 解释:'e'出现两次,'r'和't' ...
随机推荐
- 每天学五分钟 Liunx 0001 | 存储篇:swap
swap swap ,内存交换空间,它是磁盘上的一块空间,主要作用是为了防止物理内存不足. CPU 从内存中读取数据.当内存的空间不足时, CPU 难以读取到数据,导致程序无法正常工作.所以诞生了 s ...
- Laravel - 419 unknown status 解决
在 head 头部加入下方代码就可解决<meta name="_token" content="{{ csrf_token() }}"/>
- SQLServer命令行备份数据库
SQLServer命令行备份数据库 背景 SQLServer on linux 想设置计划任务自动备份数据库 感觉sqlcmd应该是最简单快捷的方式了 所以进行一下处理. 安装必备软件 sudo cu ...
- [转帖]Oracle中INITRANS和MAXTRANS参数
每个块都有一个块首部.这个块首部中有一个事务表.事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定.这个事务表的初始大小由对象的INITRANS 设置指定.对于表,这个值默认为2(索引的IN ...
- [转帖]Docker资源(CPU/内存/磁盘IO/GPU)限制与分配指南
https://zhuanlan.zhihu.com/p/417472115 什么是cgroup? cgroups其名称源自控制组群(control groups)的简写,是Linux内核的一个功能, ...
- [转帖]使用s3(minio)为kubernetes提供pv存储
http://www.lishuai.fun/2021/12/31/k8s-pv-s3/#/%E8%A6%81%E6%B1%82 我们可以通过csi使用s3为kubernetes提供pv存储,当我们申 ...
- [转帖]关于https://goproxy.cn,direct与https://proxy.golang.org的问题,国内无法访问https://proxy.golang.org设置了GOPROXY仍不可行
关于https://goproxy.cn,direct与https://proxy.golang.org的问题,国内无法访问https://proxy.golang.org设置了GOPROXY仍不可行 ...
- 【转帖】Linux中如何取消ln链接?(linuxln取消)
https://www.dbs724.com/163754.html Linux系统使用ln命令可以快速创建链接,ln链接是指把文件和目录链接起来,当改变源时可以快速地改变整个目录下的文件和目录.有时 ...
- [转帖]Python基础之判断和循环(三)
https://www.jianshu.com/p/5a7552821c63 一.判断 关于判断,跟字面意思一样,就是判断某一个时刻应不应该做某件事: 语法: if 判断条件: 执行语句-- else ...
- [转帖]vm内核参数之缓存回收drop_caches
注:本文分析基于3.10.0-693.el7内核版本,即CentOS 7.4 1.关于drop_caches 通常在内存不足时,我们习惯通过echo 3 > /proc/sys/vm/drop_ ...