这个题解的思路是统计字符串中某些独特字母的出现次数,从而推断出对应数字的个数。具体来说:
1. 统计 'z' 的出现次数,推断出 'zero' 即数字 0 的个数
2. 统计 'w' 的出现次数,推断出 'two' 即数字 2 的个数
3. 统计 'u' 的出现次数,推断出 'four' 即数字 4 的个数
4. 统计 'x' 的出现次数,推断出 'six' 即数字 6 的个数
5. 统计 'g' 的出现次数,推断出 'eight' 即数字 8 的个数
6. 统计 's' 的出现次数,减去 'x'('six') 的个数,得到 'seven' 即数字 7 的个数
7. 统计 'f' 的出现次数,减去 'u'('four') 的个数,得到 'five' 即数字 5 的个数
8. 统计 'h' 的出现次数,减去 'g'('eight') 的个数,得到 'three' 即数字 3 的个数
9. 统计 'o' 的出现次数,减去 'z'('zero')、'w'('two')、'u'('four') 的个数,得到 'one' 即数字 1 的个数
10. 统计 'i' 的出现次数,减去 'f'('five')、'x'('six')、'g'('eight') 的个数,得到 'nine' 即数字 9 的个数
最后,按照数字从小到大的顺序,把统计得到的各个数字的个数转化为相应数量的数字字符,拼接成结果字符串返回。
时间复杂度: O(n)
空间复杂度: O(n)
class Solution(object):
def originalDigits(self, s):
"""
:type s: str
:rtype: str
"""
ret = ""
nums = [0]*10
# 统计数字 0 的个数
nums[0] = s.count("z")
# 统计数字 2 的个数
nums[2] = s.count("w")
# 统计数字 4 的个数
nums[4] = s.count("u")
# 统计数字 6 的个数
nums[6] = s.count("x")
# 统计数字 8 的个数
nums[8] = s.count("g")
# 统计数字 7 的个数
nums[7] = s.count("s") - nums[6]
# 统计数字 5 的个数
nums[5] = s.count("f") - nums[4]
# 统计数字 3 的个数
nums[3] = s.count("h") - nums[8]
# 统计数字 1 的个数
nums[1] = s.count("o") - nums[0] - nums[2] - nums[4]
# 统计数字 9 的个数
nums[9] = s.count("i") - nums[5] - nums[6] - nums[8]
# 构造结果字符串
for i in range(0,10):
ret += str(i)*nums[i]
return ret