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"
思路:首先按顺序,找出依次能辨认出来的数字,程序如下:
class Solution {
public String originalDigits(String s) {
String[] str = new String[]{"zero", "two", "four", "five", "seven", "six", "one", "three", "nine", "eight"};
char[] c = new char[]{'z', 'w', 'u', 'f', 'v', 's', 'o', 'r', 'n', 't'};
char[] num = new char[]{'0', '2', '4', '5', '7', '6', '1', '3', '9', '8'};
int[] ch = new int[26];
int len = s.length();
for (int i = 0; i < len; ++ i){
ch[s.charAt(i) - 'a'] ++;
}
StringBuilder sb = new StringBuilder();
for (int i= 0; i < str.length; ++ i){
if (ch[c[i] - 'a'] != 0){
sb.append(num[i]);
int l = str[i].length();
for (int j = 0; j < l; ++ j){
ch[str[i].charAt(j) - 'a'] --;
}
i --;
}
}
String tmp = sb.toString();
char[] a = tmp.toCharArray();
Arrays.sort(a);
return new String(a);
}
}