Leetcode 423. Reconstruct Original Digits from English
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the digits in ascending order.
Note:
- Input contains only lowercase English letters.
- Input is guaranteed to be valid and can be transformed to its original digits. That means invalid inputs such as "abc" or "zerone" are not permitted.
- Input length is less than 50,000.
Example 1:
Input: "owoztneoer" Output: "012"
Example 2:
Input: "fviefuro" Output: "45"
本题的关键就在于在这个string中以什么顺序把其中的数字逐个挑出来。
所有的0-9中,只有0的拼写里面有'z',只有2里面包含'w'。利用这种思路,可以确定顺序为
[z]ero, t[w]o, si[x], fo[u]r, [f]ive, se[v]en, ei[g]ht, t[h]ree, n[i]ne, [o]ne
1 class Solution(object): 2 def originalDigits(self, s): 3 """ 4 :type s: str 5 :rtype: str 6 """ 7 8 d = collections.Counter(s) 9 cnt0 = cnt1 = cnt2 = cnt3 = cnt4 = cnt5 = cnt6 = cnt7 = cnt8 = cnt9 = 0 10 11 while d['z'] > 0: 12 d['z'] -= 1; d['e'] -= 1; d['r'] -= 1; d['o'] -= 1 13 cnt0 += 1 14 15 while d['w'] > 0: 16 d['t'] -= 1; d['w'] -= 1; d['o'] -= 1 17 cnt2 += 1 18 19 while d['x'] > 0: 20 d['s'] -= 1; d['i'] -= 1; d['x'] -= 1 21 cnt6 += 1 22 23 while d['u'] > 0: 24 d['f'] -= 1; d['o'] -= 1; d['u'] -= 1; d['r'] -= 1 25 cnt4 += 1 26 27 while d['f'] > 0: 28 d['f'] -= 1; d['i'] -= 1; d['v'] -= 1; d['e'] -= 1 29 cnt5 += 1 30 31 while d['g'] > 0: 32 d['e'] -= 1; d['i'] -= 1; d['g'] -= 1; d['h'] -= 1; d['t'] -= 1 33 cnt8 += 1 34 35 while d['h'] > 0: 36 d['t'] -= 1; d['h'] -= 1; d['r'] -= 1; d['e'] -= 2 37 cnt3 += 1 38 39 while d['v'] > 0: 40 d['s'] -= 1; d['e'] -= 2; d['v'] -= 1; d['n'] -= 1 41 cnt7 += 1 42 43 while d['i'] > 0: 44 d['n'] -= 2; d['i'] -= 1; d['e'] -= 1 45 cnt9 += 1 46 47 while d['n'] > 0: 48 d['o'] -= 1; d['n'] -= 1; d['e'] -= 1 49 cnt1 += 1 50 51 return '0'*cnt0 + '1'*cnt1 + '2'*cnt2 + '3'*cnt3 + '4'*cnt4 + '5'*cnt5 + '6'*cnt6 + '7'*cnt7 + '8'*cnt8 + '9'*cnt9 52 53 54

浙公网安备 33010602011771号