423. 从英文中重建数字
题目描述
给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。
示例 1:
输入:s = "owoztneoer" 输出:"012"
示例 2:
输入:s = "fviefuro" 输出:"45"
提示:
1 <= s.length <= 105s[i]为["e","g","f","i","h","o","n","s","r","u","t","w","v","x","z"]这些字符之一s保证是一个符合题目要求的字符串
解法
方法一
思考
英文数字的字母互相重叠,不能按单词顺序贪心匹配。若干字母却只属于一个数字。
\(\texttt{z}\) 只在 zero,\(\texttt{w}\) 只在 two,\(\texttt{u}\) 只在 four,\(\texttt{x}\) 只在 six,\(\texttt{g}\) 只在 eight。扣掉这些之后,\(\texttt{h}\)、\(\texttt{f}\)、\(\texttt{s}\) 分别确定 three、five、seven,最后用 \(\texttt{o}\)、\(\textit{i}\) 确定 one、nine。
按「唯一字母」的偏序计数,每个数字的个数被线性方程组唯一确定,再按 \(0\) 到 \(9\) 拼回字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
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 | |
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 | |
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 | |