题目链接:423. 从英文中重建数字 - 力扣(LeetCode) (leetcode-cn.com)
难度:Medium
寻找一个排列,满足每个字符串都存在后边的字符串没有出现过的字符,并且这个字符在它的串中是唯一的,这样我们从前往后删,每次可以确定一个字符串在答案中出现的次数,因为:
- 它存在后面的字符串没有出现过的字符,它是唯一的。
- 1.中的字符是唯一的,可以直接统计次数。
注意每次统计次数之后要把该字符串在统计数组中减掉。
class Solution {
public:
string originalDigits(string s) {
string strs[10] = {"zero", "two", "four", "six", "one", "three", "five", "seven", "eight", "nine"};
char chs[10] = {'z','w','u','x','o','r','f','v','g','i'};
int nums[10] = {0,2,4,6,1,3,5,7,8,9};
int ansNum[10] = {0};
int cnt[26] = {0};
for(char ch:s){
cnt[ch-'a']++;
}
for(int i=0;i<10;i++){
int chCnt = cnt[chs[i]-'a'];
ansNum[nums[i]] += chCnt;
for(char ch:strs[i]){
cnt[ch-'a'] -= chCnt;
}
}
string ans = "";
for(int i=0;i<10;i++){
ans += string(ansNum[i], char(i+'0'));
}
return ans;
}
};