解题思路

看到字母乱序,可以猜到应该使用词频统计的思路来做。
写一段python代码统计一下各个单词唯一拥有的单词:

# 得到每个单词单独拥有的字符
a = ["zero","one","two","three","four","five","six","seven","eight","nine"]
for i in range(len(a)):
        diff = set(a[i]) - set(''.join(a[:i]+a[i+1:]))
        print(a[i], diff)

输出:

zero {'z'}
one set()
two {'w'}
three set()
four {'u'}
five set()
six {'x'}
seven set()
eight {'g'}
nine set()

可以直接得到5个单词的数量,从统计的角度上看这5个单词的数量计算是不需要依赖其他单词就能得到的。其他单词可以由共同拥有的字符的统计量从减去已知值得到,比如’s’只在’six’和’seven’出现,我们知道six的数量,马上可以算出seven的数量了。同样的,提供一个python统计脚本:

# 得到列表a中的包含某字符的所有单词
list(filter(lambda x: 's' in x, a))  # 每次把's'改成你想知道字符
双百

代码

func originalDigits(s string) string {
    n0 := strings.Count(s, "z")
    n2 := strings.Count(s, "w")
    n4 := strings.Count(s, "u")
    n6 := strings.Count(s, "x")
    n8 := strings.Count(s, "g")
    n7 := strings.Count(s, "s") - n6
    n5 := strings.Count(s, "v") - n7
    n3 := strings.Count(s, "h") - n8
    n9 := strings.Count(s, "i") - n5 - n6 - n8
    n1 := strings.Count(s, "n") - n7 - n9 - n9

    return strings.Repeat("0", n0) + strings.Repeat("1", n1)  + strings.Repeat("2", n2) + strings.Repeat("3", n3) + strings.Repeat("4", n4) + strings.Repeat("5", n5) + strings.Repeat("6", n6) + strings.Repeat("7", n7) + strings.Repeat("8", n8) + strings.Repeat("9", n9)
}

作者:darkwhite
链接:https://leetcode-cn.com/problems/reconstruct-original-digits-from-english/solution/shuang-bai-jian-dan-si-lu-ci-pin-tong-ji-wi64/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
最后修改日期: 2021年11月24日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。