-
Notifications
You must be signed in to change notification settings - Fork 88
/
ReconstructOriginalDigitsFromEnglish423.java
55 lines (51 loc) · 1.72 KB
/
ReconstructOriginalDigitsFromEnglish423.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/**
* 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"
*/
public class ReconstructOriginalDigitsFromEnglish423 {
/**
* https://leetcode.com/problems/reconstruct-original-digits-from-english/discuss/91207/one-pass-O(n)-JAVA-Solution-Simple-and-Clear
*/
public String originalDigits(String s) {
int[] count = new int[10];
for (int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if (c == 'z') count[0]++;
if (c == 'w') count[2]++;
if (c == 'x') count[6]++;
if (c == 's') count[7]++; //7-6
if (c == 'g') count[8]++;
if (c == 'u') count[4]++;
if (c == 'f') count[5]++; //5-4
if (c == 'h') count[3]++; //3-8
if (c == 'i') count[9]++; //9-8-5-6
if (c == 'o') count[1]++; //1-0-2-4
}
count[7] -= count[6];
count[5] -= count[4];
count[3] -= count[8];
count[9] = count[9] - count[8] - count[5] - count[6];
count[1] = count[1] - count[0] - count[2] - count[4];
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 9; i++){
for (int j = 0; j < count[i]; j++){
sb.append(i);
}
}
return sb.toString();
}
}