423. Reconstruct Original Digits from English
好麻烦啊,本题的意思就是给出0-9对应的字符,zero-nine,将这些字符打乱顺序,得到一个字符串,现在需要将这个字符串识别出数字来,并且按照从小到大的顺序输出。
在查看别人的代码中,发现了更加简单的书写方式。 我的代码:
class Solution { public: string originalDigits(string s) { vector<string> strNum; strNum.push_back("zero"); strNum.push_back("one"); strNum.push_back("two"); strNum.push_back("three"); strNum.push_back("four"); strNum.push_back("five"); strNum.push_back("six"); strNum.push_back("seven"); strNum.push_back("eight"); strNum.push_back("nine"); map<char,int> count; for(int i=0;i<s.size();i++) count[s[i]]++; vector<int> trans; /*for(map<char,int>::iterator it =count.begin();it!=count.end();it++) cout<<it->first<<" "<<it->second<<endl;*/ trans.insert(trans.begin(),count['w'],2); trans.insert(trans.begin(),count['u'],4); trans.insert(trans.begin(),count['x'],6); trans.insert(trans.begin(),count['g'],8); trans.insert(trans.begin(),count['z'],0); int temp=count['z']; for(int i=0;i<strNum[0].size();i++) //zero count[strNum[0][i]]-=temp; temp=count['w']; for(int i=0;i<strNum[2].size();i++) // count[strNum[2][i]]-=temp; temp=count['u']; for(int i=0;i<strNum[4].size();i++) // count[strNum[4][i]]-=temp; temp=count['x']; for(int i=0;i<strNum[6].size();i++) // count[strNum[6][i]]-=temp; temp=count['g']; for(int i=0;i<strNum[8].size();i++) // count[strNum[8][i]]-=temp; /*for(map<char,int>::iterator it =count.begin();it!=count.end();it++) cout<<it->first<<" "<<it->second<<endl;*/ trans.insert(trans.begin(),count['s'],7); trans.insert(trans.begin(),count['f'],5); trans.insert(trans.begin(),count['h'],3); trans.insert(trans.begin(),count['o'],1); temp=count['s']; for(int i=0;i<strNum[7].size();i++) // count[strNum[7][i]]-=temp; temp=count['f']; for(int i=0;i<strNum[5].size();i++) // count[strNum[5][i]]-=temp; temp=count['h']; for(int i=0;i<strNum[3].size();i++) // count[strNum[3][i]]-=temp; temp=count['o']; for(int i=0;i<strNum[1].size();i++) // count[strNum[1][i]]-=temp; trans.insert(trans.begin(),count['i'],9); temp=count['i']; for(int i=0;i<strNum[9].size();i++) // count[strNum[9][i]]-=temp; sort(trans.begin(),trans.end()); string result; for(int i=0;i<trans.size();i++) result+=to_string(trans[i]); return result; } };别人的代码,没有考虑所有的位置情况,而是只关注用于计数的那些字母,方便了很多,值得学习。
class Solution { public: string originalDigits(string s) { vector<int> a(10, 0); vector<int> alpha(128, 0); for (char c : s) alpha[c]++; a[0] = alpha['z']; a[2] = alpha['w']; a[4] = alpha['u']; a[6] = alpha['x']; a[8] = alpha['g']; a[3] = alpha['h'] - a[8]; a[5] = alpha['f'] - a[4]; a[7] = alpha['v'] - a[5]; a[1] = alpha['o'] - a[0] - a[2] - a[4]; a[9] = alpha['i'] - a[5] - a[6] - a[8]; string ans; for (int i = 0; i < 10; i++) { if (a[i] > 0) ans += string(a[i], '0' + i); } return ans; } };