从英文中重建数字

给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。

  • 输入:s = “owoztneoer”

  • 输出:”012”

  • 输入:s = “fviefuro”

  • 输出:”45”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var originalDigits = function(s) {
const eng = [
{ index: 0, en: 'zero' },
{ index: 6, en: 'six' },
{ index: 8, en: 'eight' },
{ index: 2, en: 'two' },
{ index: 3, en: 'three' },
{ index: 7, en: 'seven' },
{ index: 5, en: 'five' },
{ index: 9, en: 'nine' },
{ index: 1, en: 'one' },
{ index: 4, en: 'four' }
]
const tag = ['z', 'n', 'w', 'h', 'u', 'v', 'x', 's', 'g', 'i']
const mp = new Map()
// 先统计字符串中字母出现的次数
for (const ch of s) {
mp.set(ch, (mp.get(ch) || 0) + 1)
}
const arr = new Array(10).fill(0)
// 按照 拿到的 index,开始对 mp 进行操作
for (const { index, en } of eng) {
// 如果有存在,再进行操作
if (mp.has(tag[index])) {
arr[index] = mp.get(tag[index])
for (const ch of en) {
mp.set(ch, mp.get(ch) - arr[index])
}
}
}
let res = ''
for (let i = 0; i < 10; i++) {
for (let j = 0; j < arr[i]; j++) {
res += i
}
}
return res
};