423英語からデジタル再建
英数字のスクランブル0-9英語の単語表現を含む非空の文字列が与えられました。オリジナルのデジタル出力を昇順。
注意:
入力は小文字のみが含まれています。
入力は、正当な保証とオリジナルデジタル、どのような入力「ABC」または「zerone」が許可されていないことを意味に変換することができます。
入力文字列の長さが50,000未満です。
例1:
入力: "owoztneoer"
出力: "012"(zeroonetwo)
例2:
入力: "fviefuro"
出力: "45"(fourfive)
PS:
私は、これが問題とleetcode同じテストケースの最初の記述だと思います
b( ̄▽ ̄)d
class Solution {
public String originalDigits(String s) {
int[] wordCnt = new int[26];
for (char c : s.toCharArray()) {
wordCnt[c - 'a']++;
}
int[] numCnt = new int[10];
numCnt[0] = wordCnt['z' - 'a'];
numCnt[2] = wordCnt['w' - 'a'];
numCnt[4] = wordCnt['u' - 'a'];
numCnt[6] = wordCnt['x' - 'a'];
numCnt[8] = wordCnt['g' - 'a'];
numCnt[1] = wordCnt['o' - 'a'] - numCnt[0] - numCnt[2] - numCnt[4];
numCnt[3] = wordCnt['h' - 'a'] - numCnt[8];
numCnt[5] = wordCnt['f' - 'a'] - numCnt[4];
numCnt[7] = wordCnt['s' - 'a'] - numCnt[6];
numCnt[9] = wordCnt['i' - 'a'] - numCnt[5] - numCnt[6] - numCnt[8];
int len = 0;
for (int c : numCnt) {
len += c;
}
char[] res = new char[len];
len = 0;
for (int i = 0; i <= 9; i++) {
for (int j = 0; j < numCnt[i]; j++) {
res[len++] = (char)('0' + i);
}
}
return new String(res);
}
}