题目
思路
脑筋急转弯题,根据从0到9英文单词中某些字母出现的次数判断,依此类推~
代码一
class Solution {
public:
string originalDigits(string s) {
int cnt[26],nums[10];
memset(cnt,0,sizeof(cnt));
memset(nums,0,sizeof(nums));
for(int i=0;i<s.length();i++){
cnt[s[i]-'a']++;
}
nums[0]=cnt['z'-'a'];
nums[6]=cnt['x'-'a'];
nums[8]=cnt['g'-'a'];
nums[2]=cnt['w'-'a'];
nums[3]=cnt['h'-'a']-nums[8];
nums[7]=cnt['s'-'a']-nums[6];
nums[5]=cnt['v'-'a']-nums[7];
nums[4]=cnt['f'-'a']-nums[5];
nums[1]=cnt['o'-'a']-nums[0]-nums[2]-nums[4];
nums[9]=(cnt['n'-'a']-nums[1]-nums[7])/2;
string res="";
for(int i=0;i<10;i++){
int k=nums[i];
while(k--){
res+=to_string(i);
}
}
return res;
}
};
代码二
class Solution {
public:
string originalDigits(string s) {
vector<string> word={"zero","one","two","three","four","five","six","seven","eight","nine"};
int priority[10]={0,6,8,2,3,7,5,4,1,9};
int cnt[26],nums[10];
string ans="";
memset(cnt,0,sizeof(cnt));
memset(nums,0,sizeof(nums));
for(char c:s)
cnt[c-'a']++;
for(int i:priority){
int k=INT_MAX;
for(char c:word[i]) k=min(k,cnt[c-'a']);
for(char c:word[i]) cnt[c-'a']-=k;
nums[i]+=k;
}
for(int i=0;i<10;i++){
int k=nums[i];
while(k--){
ans+=to_string(i);
}
}
return ans;
}
};