【问题标题】:Sort an array alphabetically and return a number representation for every character按字母顺序对数组进行排序并返回每个字符的数字表示
【发布时间】:2021-10-05 15:25:54
【问题描述】:

我想尝试制作自己的功能。 我想按升序对字符数组进行排序,并将每个字符的出现次数作为一个紧凑数字返回。

例子:

function numberRepresentation(arr) {
    // arr is an array
    // return a number

    /*
    ex. arr=[b,a,a,a,c,b,a]
    after sorting array will look like arr=[a,a,a,a,b,b,c]
    occurrence of characters -> a = 4, b = 2, c = 1 
    so output will be 421
    */
}

我该怎么做?

【问题讨论】:

  • 欢迎来到 StackOverflow,您能否向我们展示您迄今为止所做的尝试以及您遇到问题的哪一部分?查看help center,了解如何提出好问题
  • 为什么是 421 而不是 241?是因为a < b < c 还是因为count(a) > count(b) > count(c)?换句话说,[a,b,b] 需要哪个输出?
  • 如果 arr = [a,b,b],输出应该是 12

标签: javascript arrays sorting data-representation


【解决方案1】:
function numberRepresentation(arr) {
    return arr.reduce((counts, letter) => {
        const code = letter.charCodeAt(0)
        counts[code] = counts[code] + 1 || 1
        return counts
    }, []).join('')
}

解释:

我们只计算每个字母的出现次数,但我们使用简单的数组和字符代码作为索引。因此,我们自动获得按字母顺序排列的字母计数列表(因为字符代码按 abc 顺序排列)。所以我们需要做的就是连接所有的计数并返回。

【讨论】:

  • 谁把减号解释一下你不喜欢什么?
  • 无论是否有意,您都设法找到了一个不需要排序的解决方案。你应该得到积分!
  • @Jamiec 是的,我在没有故意排序的情况下做了一个解决方案,因为这是最优化的方式。我检查了你的小提琴,没​​有发现任何问题。它可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多