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:

  1. Input contains only lowercase English letters.
  2. 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.
  3. 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         

 

posted @ 2016-12-27 13:25  lettuan  阅读(174)  评论(0)    收藏  举报