423. 从英文中重建数字
解题过程
INFO
题目链接 给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字
javascript
/**
* @link https://leetcode.cn/problems/reconstruct-original-digits-from-english/
* @title 423. 从英文中重建数字
* @description 给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字
* @param {string} s
* @return {string}
*/
// 解法一
// 思路:看了20分钟没思路,根据官方题解思路自己做了一遍
// 第一步:统计所有字符出现的次数
// 第二步:找规律,每个数字单词,先统计特殊字符的单词,在统计根据特殊字符单词减去可以等到的剩下字符的单词
// 第三步:组装数字
var originalDigits = function (s) {
const sMap = new Map()
const nums = new Array(10).fill(0)
for (let i = 0; i < s.length; i++) {
sMap.set(s[i], (sMap.get(s[i]) || 0) + 1)
}
nums[0] = sMap.get('z') || 0
nums[2] = sMap.get('w') || 0
nums[4] = sMap.get('u') || 0
nums[6] = sMap.get('x') || 0
nums[8] = sMap.get('g') || 0
nums[3] = (sMap.get('h') || 0) - nums[8]
nums[5] = (sMap.get('f') || 0) - nums[4]
nums[7] = (sMap.get('s') || 0) - nums[6]
nums[1] = (sMap.get('o') || 0) - nums[0] - nums[2] - nums[4]
nums[9] = (sMap.get('i') || 0) - nums[5] - nums[6] - nums[8]
const res = []
for (let i = 0; i < nums.length; i++) {
res.push((i + '').repeat(nums[i]))
}
return res.join('')
}
// const result = originalDigits('owoztneoer') // 012
// const result = originalDigits('fviefuro') // 45
const result = originalDigits('nnei') // 9
console.log(result)
解题感受
想了 20 分钟思路一直卡死,没有解题方法,而且没有比较好的技巧解题,看了官方题解思路理解一遍做的,感觉就是硬找单词字符规律穷举计算得来的,怀疑这题的考察什么,用意在哪里 😓
优质题解
- https://leetcode.cn/problems/reconstruct-original-digits-from-english/solution/cong-ying-wen-zhong-zhong-jian-shu-zi-by-9g1r/
- https://leetcode.cn/problems/reconstruct-original-digits-from-english/solution/gong-shui-san-xie-nao-jin-ji-zhuan-wan-m-vg7a/
- https://leetcode.cn/problems/reconstruct-original-digits-from-english/solution/dai-ma-jian-ji-yi-chong-huan-bu-cuo-de-j-xsaf/