423. 从英文里重建数字
2020-09-25 本文已影响0人
玖月晴
题目
难度:★★☆☆☆
类型:字符串
方法:数学
力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录
给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9。按升序输出原始的数字。
注意:
输入只包含小写英文字母。
输入保证合法并可以转换为原始的数字,这意味着像 "abc" 或 "zerone" 的输入是不允许的。
输入字符串的长度小于 50,000。
示例
示例 1:
输入: "owoztneoer"
输出: "012" (zeroonetwo)
示例 2:
输入: "fviefuro"
输出: "45" (fourfive)
解答
这道题不难,需要统计每个单词乱序后出现的个数。思路是以字母数代替单词数。字母有两种,一种是单独出现在一个单词中的,另一种是在多个单词中使用过的。我们可以寻找哪些字母是独一无二的,以此来代表单词出现的次数。例如“z”只在“zero”中出现过,“w”只在“two”中出现过等等。优先计算含有独一无二字母的单词,对于那些所有字母都在别的单词中出现过的情况,我们可以尽可能选取那些最不经常出现的字母,减去在出现在其他单词中的单词个数即可。最终按照升序和单词个数将对应数字排列起来即可。
class Solution:
def originalDigits(self, s: str) -> str:
n0 = s.count('z')
n2 = s.count('w')
n4 = s.count('u')
n8 = s.count('g')
n6 = s.count('x')
n3 = s.count('t') - n2 - n8
n7 = s.count('s') - n6
n1 = s.count('o') - n4 - n2 - n0
n5 = s.count('v') - n7
n9 = s.count('i') - n8 - n6 - n5
return "".join((str(i) * n for i, n in enumerate(list(map(eval, ['n{}'.format(i) for i in range(10)])))))
如有疑问或建议,欢迎评论区留言~
有关更多力扣中等题的python解决方案,请移步力扣中等题解析