leetcode_423 从英文中重建数字

291 阅读1分钟

要求

给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字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

image.png

解题思路:我们可以确定某些有绝对特征的数据,只要出现这些绝对特征就一定是那个数字,比如zero的z,只有0中存在,two中的w等,我们可以先将这些可以确定个数的数字从统计字典中踢出去,在一点一点确定剩下的数字来自于谁,最后将统计出来的数字进行拼接即可。