423. 从英文中重建数字

给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9。按升序输出原始的数字。

注意:

输入只包含小写英文字母。
输入保证合法并可以转换为原始的数字,这意味着像 "abc" 或 "zerone" 的输入是不允许的。
输入字符串的长度小于 50,000。

示例 1:
输入: "owoztneoer"
输出: "012" (zeroonetwo)

示例 2:
输入: "fviefuro"
输出: "45" (fourfive)

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reconstruct-original-digits-from-english
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

0的英文zeroz是唯一的,统计字符串中z的出现次数即为0的次数,同样的还有two中的wfour中的usix中的xeight中的g
3的英文three中的h8的英文eight中也出现了,所以3的出现次数为h的总出现次数减去8的出现次数(8的出现次数即g的出现次数)

/**
 * @param {string} s
 * @return {string}
 */
var originalDigits = function(s) {
    const count = (n) => {
        let c = 0
        for (let i = 0; i < s.length; i++) {
            if (s[i] == n) {
                c++
            }
        }
        return c
    }
    const str = (s, n) => {
        let temp = ''
        for (let i = 0; i < n; i++) {
            temp += s
        }
        return temp
    }
    let a0 = count('z')
    let a2 = count('w')
    let a4 = count('u')
    let a6 = count('x')
    let a8 = count('g')
    let a3 = count('h') - a8
    let a7 = count('s') - a6
    let a5 = count('v') - a7
    let a1 = count('o') - a0 - a2 - a4
    let a9 = count('i') - a5 - a6 - a8
    let res = ''
    for (let i = 0; i <= 9; i++) {
        res += str(i, eval('a' + i))
    }
    return res
};