给定一个字符串,我想根据其字符频率的递减对其进行排序。 如果计数相同,则字符应按字母顺序排序。
Input: "Programming"
Output: "ggmmrrPiano"
Explanation: 'r', 'g', and 'm' appeared twice, so they need to appear before any other character. 'g' appeasr before 'm' and 'r' hence why it appears first.
这是我到目前为止的代码:
const sort_character_by_frequency = function(str) {
let map={}
for(let i=0;i<str.length;i++){
map[str[i]]?(map[str[i]]+=1):(map[str[i]]=1);
}
return Object.keys(map).sort((a, b) => return {
if(map[a] === map[b]){
return a.charCodeAt(0)-b.charCodeAt(0);
}
else return map[b]-map[a];
}).reduce((str, key)=>{
return str+=key.repeat(map[key])
},"")
};
我在 Objects.keys(map).sort() 语句开头收到“意外标记”错误。我一生都无法弄清楚出了什么问题。
对此问题的任何帮助或见解将不胜感激。
最佳答案
实现此目的的一种方法是利用语言功能,如下所示:
let str = "Lorem ipsum dolor sit amet, Consectetur adipiscing elit,"
let newStr =
str.split('').sort().join('').match(/(\w)\1*/g).sort(
(x, y) => y.length - x.length
).join('')
console.log(newStr)
它splits将字符串放入数组中,sorts按值和joins将其转换为字符串 matched正则表达式 /(\w)\1*/g
返回包含所有字符组的数组。反过来,该数组按其元素的长度排序并再次连接成字符串。
关于javascript - 按频率降序对字符串中的字符进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58789699/