Reconstruct Original Digits from English 從英文中重建數字
阿新 • • 發佈:2019-01-01
給定一個非空字串,其中包含字母順序打亂的英文單詞表示的數字0-9
。按升序輸出原始的數字。
注意:
- 輸入只包含小寫英文字母。
- 輸入保證合法並可以轉換為原始的數字,這意味著像 "abc" 或 "zerone" 的輸入是不允許的。
- 輸入字串的長度小於 50,000。
示例 1:
輸入: "owoztneoer" 輸出: "012" (zeroonetwo)
示例 2:
輸入: "fviefuro" 輸出: "45" (fourfive),
思路:由於給定的字串是無序的,且保證輸入是有效的,所以只要找到每一個數字的“獨特標識”即可(換句話說,每個數字只需要一個字母就可以唯一代替),那麼只要從0開始到9,統計各個唯一字母的次數就可以了。
具體如下圖所示,每個字母在所有子母中出現的次數統計:
先統計次數為1的,然後是2的,然後3,以此類推。。。
參考程式碼:
class Solution { public: string originalDigits(string s) { vector<int> counts(10, 0); for (char c : s) { if (c == 'z') counts[0]++; if (c == 'w') counts[2]++; if (c == 'g') counts[8]++; if (c == 'u') counts[4]++; if (c == 'x') counts[6]++; if (c == 's') counts[7]++; //7-6 if (c == 'f') counts[5]++; //5-4 if (c == 'h') counts[3]++; //3-8 if (c == 'i') counts[9]++; //9-8-5-6 if (c == 'o') counts[1]++; //1-0-2-4 } counts[7] -= counts[6]; counts[5] -= counts[4]; counts[3] -= counts[8]; counts[9] = counts[9]- counts[8] - counts[5] - counts[6]; counts[1] = counts[1] - counts[0] - counts[2] - counts[4]; string result = ""; for (int i = 0; i < 10; i++) { while (counts[i] > 0) { result.push_back(i + '0'); counts[i]--; } } return result; } };