LeetCode 423. 從英文中重建數字(C++)
阿新 • • 發佈:2018-12-10
給定一個非空字串,其中包含字母順序打亂的英文單詞表示的數字0-9
。按升序輸出原始的數字。
注意:
- 輸入只包含小寫英文字母。
- 輸入保證合法並可以轉換為原始的數字,這意味著像 "abc" 或 "zerone" 的輸入是不允許的。
- 輸入字串的長度小於 50,000。
示例 1:
輸入: "owoztneoer"
輸出: "012" (zeroonetwo)
示例 2:
輸入: "fviefuro"
輸出: "45" (fourfive)
思路:觀察發現,zero、two、four、six、eight中具有獨一無二的字母,利map統計出每個字元的個數,求出這5個數字的個數後,剩下的有4個數字one、three、five、seven中具有獨一無二的字母,最後一個數字nine的個數可以通過字母i的個數減去字母f的個數得到。
C++
class Solution { public: string originalDigits(string s) { int a[10]={0}; int n=s.length(); map<char,int> dic; for(int i=0;i<n;i++) { if(dic.count(s[i])<1) { dic.insert(pair<char,int>(s[i],1)); } else { dic[s[i]]+=1; } } for(int i=0;i<n;i++) { if(s[i]=='z') { a[0]++; dic['e']--; dic['r']--; dic['o']--; } if(s[i]=='w') { a[2]++; dic['t']--; dic['o']--; } if(s[i]=='u') { a[4]++; dic['f']--; dic['o']--; dic['r']--; } if(s[i]=='x') { a[6]++; dic['s']--; dic['i']--; } if(s[i]=='g') { a[8]++; dic['e']--; dic['i']--; dic['h']--; dic['t']--; } } a[1]=dic['o']; a[3]=dic['t']; a[5]=dic['f']; a[7]=dic['s']; a[9]=dic['i']-dic['f']; string res; for(int i=0;i<10;i++) { //for(int j=0;j<a[i];j++) //{ // res.push_back(i+'0'); //} res.insert(res.end(),a[i],i+'0'); } return res; } };