要求
给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9。按升序输出原始的数字。
注意:
输入只包含小写英文字母。
输入保证合法并可以转换为原始的数字,这意味着像 "abc" 或 "zerone" 的输入是不允许的。
输入字符串的长度小于 50,000。
示例 1:
输入: "owoztneoer"
输出: "012" (zeroonetwo)
示例 2:
输入: "fviefuro"
输出: "45" (fourfive)
核心代码
class Solution:
def originalDigits(self, s: str) -> str:
import collections
order = ["zero","two","four","six","one","three","five","seven","eight","nine"]
find = ["z","w","u","x","o","r","f","v","t","e"]
digit = [0,2,4,6,1,3,5,7,8,9]
record = [0 for _ in range(10)]
dic = collections.Counter(s)
for idx in range(10):
cnt = dic[find[idx]]
record[digit[idx]] += cnt
dic = dic - collections.Counter(order[idx] * cnt)
if not dic:
break
ress = ""
for i in range(10):
ress += str(i) * record[i]
return ress
解题思路:我们可以确定某些有绝对特征的数据,只要出现这些绝对特征就一定是那个数字,比如zero的z,只有0中存在,two中的w等,我们可以先将这些可以确定个数的数字从统计字典中踢出去,在一点一点确定剩下的数字来自于谁,最后将统计出来的数字进行拼接即可。