1. 程式人生 > >LeetCode 423. 從英文中重建數字(C++)

LeetCode 423. 從英文中重建數字(C++)

給定一個非空字串,其中包含字母順序打亂的英文單詞表示的數字0-9。按升序輸出原始的數字。

注意:

  1. 輸入只包含小寫英文字母。
  2. 輸入保證合法並可以轉換為原始的數字,這意味著像 "abc" 或 "zerone" 的輸入是不允許的。
  3. 輸入字串的長度小於 50,000。

示例 1:

輸入: "owoztneoer"

輸出: "012" (zeroonetwo)

示例 2:

輸入: "fviefuro"

輸出: "45" (fourfive)

思路:觀察發現,zero、two、four、six、eight中具有獨一無二的字母,利map統計出每個字元的個數,求出這5個數字的個數後,剩下的有4個數字one、three、five、seven中具有獨一無二的字母,最後一個數字nine的個數可以通過字母i的個數減去字母f的個數得到。

C++

class Solution {
public:
    string originalDigits(string s) 
    {
        int a[10]={0};
        int n=s.length();
        map<char,int> dic;
        for(int i=0;i<n;i++)
        {
            if(dic.count(s[i])<1)
            {
                dic.insert(pair<char,int>(s[i],1));
            }
            else
            {
                dic[s[i]]+=1;
            }
        }
        for(int i=0;i<n;i++)
        {
            if(s[i]=='z')
            {
                a[0]++;
                dic['e']--;
                dic['r']--;
                dic['o']--;
            }
            if(s[i]=='w')
            {
                a[2]++;
                dic['t']--;
                dic['o']--;
            }
            if(s[i]=='u')
            {
                a[4]++;
                dic['f']--;
                dic['o']--;
                dic['r']--;
            }
            if(s[i]=='x')
            {
                a[6]++;
                dic['s']--;
                dic['i']--;
            }
            if(s[i]=='g')
            {
                a[8]++;
                dic['e']--;
                dic['i']--;
                dic['h']--;
                dic['t']--;
            }
        }
        a[1]=dic['o'];
        a[3]=dic['t'];
        a[5]=dic['f'];
        a[7]=dic['s'];
        a[9]=dic['i']-dic['f'];
        string res;
        for(int i=0;i<10;i++)
        {
            //for(int j=0;j<a[i];j++)
            //{
            //    res.push_back(i+'0');
            //}
            res.insert(res.end(),a[i],i+'0');
        }
        return res;
    }
};