题目描述:
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the digits in ascending order.
Note:
- Input contains only lowercase English letters.
- Input is guaranteed to be valid and can be transformed to its original digits. That means invalid inputs such as "abc" or "zerone" are not permitted.
- Input length is less than 50,000.
Example 1:
Input: "owoztneoer"
Output: "012"
Example 2:
Input: "fviefuro"
Output: "45"
给定一个字符串,它包含了多个0~9的英文单词,并且字母的顺序已经全部打乱,求出这些数字,并按照从大到小排序。这道题首先需要统计字符串中各个字母的次数,然后根据每个单词的特征判断各个单词的次数,例如字母‘x’是单词“six”特有的,还有字母‘g’是单词“eight”特有的,一些特征不明显的单词需要通过进一步的加减运算求出个数。
class Solution {
public:
string originalDigits(string s) {
vector<int> count(26,0);
for(int i=0;i<s.size();i++) count[s[i]-'a']++;
vector<int> digit(10,0);
digit[0]=count['z'-'a'];
digit[1]=count['o'-'a']-count['z'-'a']-count['u'-'a']-count['w'-'a'];
digit[2]=count['w'-'a'];
digit[3]=count['h'-'a']-count['g'-'a'];
digit[4]=count['u'-'a'];
digit[5]=count['f'-'a']-count['u'-'a'];
digit[6]=count['x'-'a'];
digit[7]=count['s'-'a']-count['x'-'a'];
digit[8]=count['g'-'a'];
digit[9]=count['i'-'a']-count['f'-'a']+count['u'-'a']-count['x'-'a']-count['g'-'a'];
string result;
for(int i=0;i<10;i++)
{
while(digit[i]>0)
{
result+=(i+'0');
digit[i]--;
}
}
return result;
}
};
本文介绍了一种算法,用于解析并还原由英文单词形式表示、顺序混乱的数字串。通过统计字母出现频率并利用特定字母识别对应的数字,该算法能够准确地识别0-9之间的每一个数字,并最终按升序输出。
485

被折叠的 条评论
为什么被折叠?



