javascript - 按频率降序对字符串中的字符进行排序

标签 javascript algorithm

给定一个字符串,我想根据其字符频率的递减对其进行排序。 如果计数相同,则字符应按字母顺序排序。

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/

相关文章:

java - 如何在任何给定的三角形上使用 Pick 定理

algorithm - 计算给定 rand7 的 rand5

javascript - 我需要合并表格中的单元格。 Exceljs库

javascript - 关于 JavaScript 中变量的小菜鸟问题

javascript - 按照 jest docs 模拟 axios 但不工作

arrays - 在数组中的给定位置之后查找元素第一次出现的有效方法是什么?

python - 字符串上的单次交换

javascript - 如何抓取页面上的某些文本?

javascript - 获取 jQuery 可排序列表中列表项的顺序

c++ - 二叉搜索树计算节点的坐标