Problem
Given a string s
containing an out-of-order English representation of digits 0-9
, return the digits in ascending order.
Example 1:
1 | Input: s = "owoztneoer" |
Example 2:
1 | Input: s = "fviefuro" |
Constraints:
1 <= s.length <= 105
s[i]
is one of the characters["e","g","f","i","h","o","n","s","r","u","t","w","v","x","z"]
.s
is guaranteed to be valid.
Analysis
题目给出了一个字符串,里面包含着英文数字的英文表示,当然顺序是混乱的。要求我们把对应的阿拉伯数字翻译出来,并且按照从小到大的顺序返回。找到对应的关系并不困难,但是难的是如何在乱序的字符串中,组合出合法的英文单词。但其实这道题目是非常巧妙的。
我们先来看从0到9的英文单词,在这10个英文单词中,有一些字母是某个单词特有的。比如z
只有zero
才有,w
只有two
才有,所以当字符串中出现了这些特殊的字母,我们就可以断定,必定有这个数字。这里的前提条件是题目保证了给出的字符串一定是valid的,所以不会有多余的字符。然后有一些字母只出现在两个单词中,而其中一个单词是上面计算过的数字,那么剩下的那个我们就可以知道了。比如x
只有six
才有,而s
是six
和seven
都有,所以当我们通过计算x
出现的次数,就能知道six
的个数,然后计算出s
的个数,减去six
的个数,结果就是seven
的个数了。按照这个思路下去,有些字符出现在三个单词中,如果我们知道其中的两个单词的出现次数,那么剩下的那个就能计算出来。于是就有了下面这个表:
z
:zero
w
:two
u
:four
x
:six
g
:eight
s
:six
,seven
h
:three
,eight
f
:four
,five
o
:zero
,one
,two
,four
i
:five
,six
,eight
,nine
求出每个数字出现的次数后,最后再一次性转化为字符串即可。
Solution
无
Code
1 | class Solution { |
Summary
这道题目的分享到这里,感谢你的支持!