壹 ❀ 引

大前天做的一道题,昨天发版到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. 根据字符出现频率排序题解分析的更多相关文章

  1. Java实现 LeetCode 451 根据字符出现频率排序

    451. 根据字符出现频率排序 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e ...

  2. Leetcode 451.根据字符出现频率排序

    根据字符出现频率排序 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e'出现两次 ...

  3. leetcode.排序.451根据字符出现频率排序-Java

    1. 具体题目 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e'出现两次,'r ...

  4. [LeetCode] 451. Sort Characters By Frequency 根据字符出现频率排序

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  5. LeetCode 451. Sort Characters By Frequency (根据字符出现频率排序)

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  6. [LeetCode] Sort Characters By Frequency 根据字符出现频率排序

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  7. 451 Sort Characters By Frequency 根据字符出现频率排序

    给定一个字符串,请将字符串里的字符按照出现的频率降序排列.示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次.因此' ...

  8. 【LeetCode】451-根据字符出现频率排序

    题目描述 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e'出现两次,'r'和' ...

  9. [Swift]LeetCode451. 根据字符出现频率排序 | Sort Characters By Frequency

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  10. 给定一个字符串,根据字符出现频率排序--Java实现

    题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入:"tree" 输出:"eert" 解释:'e'出现两次,'r'和't' ...

随机推荐

  1. 操作系统OS学习总结

    操作系统OS笔记 操作系统概述 操作系统定义 操作系统,是计算机系统中最基本.最重要的系统软件,是其它软件的支撑.控制和管理计算机系统的硬件和软件资源,合理的组织计算机工作流程,并为用户使用计算机提供 ...

  2. Idea 进行远程服务器debug操作

    本文为博主原创,转载请注明出处: 很多时候为了定位服务器的问题,不方便定位时,采用idea 远程debug 服务器环境的服务进行问题定位,主要操作步骤如下: 1. 修改服务器服务的JVM 配置,开启远 ...

  3. idea开发常用快捷键总结

    转载请注明出处: idea提供了很多的快捷键,但在开发过程中并发全用,只是常用部分快捷键,在这里总结一下,总结的不全,有好的快捷键可在评论里补充下,提前谢各位 由于很早之前用的eclipse或spri ...

  4. 在线photoshop网页版工具开发

    基于javascript开发的在线ps工具,打包方式webpack 在线预览 在线ps网页版 源码地址 https://github.com/geeeeeeeek 功能介绍 在线图像编辑器允许您使用H ...

  5. FileZilla 连接不上宝塔

    1,修改 pureftp的配置文件 ForcePassiveIP 为服务器的ip , 并去掉 # 2,FileZilla 使用明文连接

  6. EasyNetQ(RabbitMQ)在处理消息时,如果抛出异常,继续不断发送到订阅队列,不断处理(也就是不自动确认消息已到达)

    默认情况下,EasyNetQ的消息处理过程中,如果throw exception,那么,依然是认为消息已经送达,不会再次推送,为了让RabbitMQ再次推送,可以这么实现: public sealed ...

  7. restful-接口风格

  8. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.22)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  9. [转帖]Load Base Split

    https://docs.pingcap.com/zh/tidb/stable/configure-load-base-split#load-base-split Load Base Split 是 ...

  10. [转帖]py_innodb_page_info.py工具使用

    目录 一.Linux安装Python3 1. 解压包 2. 安装环境 3. 生成编译脚本 4. 检查python3.10的编译器 5. 建立Python3和pip3的软链 6. 添加到PATH 7.  ...