1、问题
给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的频率 是它出现在字符串中的次数, 返回 已排序的字符串。如果有多个答案,返回其中任何一个。
2、示例
(1)
输入: s = "tree"
输出: "eert"
解释: 'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
(2)
输入: s = "cccaaa"
输出: "cccaaa"
解释: 'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。
注意"cacaca"是不正确的,因为相同的字母必须放在一起。
(3)
输入: s = "Aabb"
输出: "bbAa"
解释: 此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。
注意'A'和'a'被认为是两种不同的字符。
3、实现思路
将字符串分割成数组,然后利用map统计频次,通过sort排序,最后将排好序的数组通过join拼接为字符串
4、具体步骤
(1) 将字符串分割成数组
(2)统计频次
(3)将map数组按照键值的形式存到数组
(4)将键通过repeat重复值次,使用join拼接
5、完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>根据字符出现频率排序</title>
</head>
<body>
<p>
<p>
给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的频率 是它出现在字符串中的次数
</p>
<p>
返回 已排序的字符串。
如果有多个答案,返回其中任何一个。
</p>
</p>
<p>
<p>
输入: s = "tree"
输出: "eert"
解释: 'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
</p>
<p>
输入: s = "cccaaa"
输出: "cccaaa"
解释: 'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。
注意"cacaca"是不正确的,因为相同的字母必须放在一起。
</p>
<p>
输入: s = "Aabb"
输出: "bbAa"
解释: 此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。
注意'A'和'a'被认为是两种不同的字符。
</p>
</p>
<p>
将字符串分割成数组,然后利用map统计频次,通过sort排序,最后将排好序的数组通过join拼接为字符串
</p>
<script>
// let s = "tree"
// let s = "cccaaa"
let s = "eeeelolovtcd"
frequencySort(s)
function frequencySort(s){
// 分割
let arr = s.split("")
// console.log(arr);
// 统计频次
const newMap = new Map()
arr.forEach(item => {
if (newMap.has(item)) {
newMap.set(item,newMap.get(item)+1)
}else{
newMap.set(item,1)
}
});
// console.log(newMap);
// 排序
const mapArray = Array.from(newMap.entries());
mapArray.sort((a,b)=>b[1]-a[1])
// console.log(mapArray);
const str = mapArray.map(item => item[0].repeat(item[1])).join('');
// console.log(str);
return str
}
</script>
</body>
</html>
6、力扣通过代码
/**
* @param {string} s
* @return {string}
*/
var frequencySort = function(s) {
// 分割
let arr = s.split("")
// console.log(arr);
// 统计频次
const newMap = new Map()
arr.forEach(item => {
if (newMap.has(item)) {
newMap.set(item,newMap.get(item)+1)
}else{
newMap.set(item,1)
}
});
// console.log(newMap);
// 排序
const mapArray = Array.from(newMap.entries());
mapArray.sort((a,b)=>b[1]-a[1])
// console.log(mapArray);
const str = mapArray.map(item => item[0].repeat(item[1])).join('');
// console.log(str);
return str
};