题目链接
https://leetcode-cn.com/problems/reconstruct-original-digits-from-english/
题目
给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字
0-9
。按升序输出原始的数字。
注意:
- 输入只包含小写英文字母。
- 输入保证合法并可以转换为原始的数字,这意味着像 "abc" 或 "zerone" 的输入是不允许的。
- 输入字符串的长度小于 50,000。
示例
示例 1:
输入: "owoztneoer"
输出: "012" (zeroonetwo)示例 2:
输入: "fviefuro"
输出: "45" (fourfive)
思路
这题其实就是找规律,0-9对应的单词为:
zero one two three four five six seven eight nine
我们可以发现,有多少个z就有多少个0,有多少个w就有多少个2....按照规律来求即可。
C++ Code
class Solution {
public:
string originalDigits(string s) {
//zero one two three four five six seven eight nine
vector<int> N(10,0);
N[0] = count(s.begin(), s.end(), 'z');
N[2] = count(s.begin(), s.end(), 'w');
N[8] = count(s.begin(), s.end(), 'g');
N[6] = count(s.begin(), s.end(), 'x');
N[3] = count(s.begin(), s.end(), 't')- N[2] - N[8];
N[4] = count(s.begin(), s.end(), 'r')- N[3] - N[0];
N[7] = count(s.begin(), s.end(), 's')- N[6];
N[1] = count(s.begin(), s.end(), 'o')- N[4] - N[2] - N[0];
N[5] = count(s.begin(), s.end(), 'v')- N[7];
N[9] = count(s.begin(), s.end(), 'i')- N[8] - N[6] - N[5];
string n;
for(int i=0;i<10;i++)
{
if(N[i]>0)
n+=string(N[i], '0' + i);
}
return n;
}
};