LeetCode每日一题:423. 从英文中重建数字【2021/11/24】

171 阅读1分钟

题目链接:423. 从英文中重建数字 - 力扣(LeetCode) (leetcode-cn.com)

难度:Medium

寻找一个排列,满足每个字符串都存在后边的字符串没有出现过的字符,并且这个字符在它的串中是唯一的,这样我们从前往后删,每次可以确定一个字符串在答案中出现的次数,因为:

  1. 它存在后面的字符串没有出现过的字符,它是唯一的。
  2. 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;
    }
};