Leetcode 423. 從英文中重建數字

題目描述:

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

注意:


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

AC代碼:

class Solution {
public:
    string originalDigits(string s) {
        int character[1024]={0};    //存放字母a~z出現的頻數
        int i=0;
        while(s[i]!='\0'){
            character[s[i++]]++;
        }
        string number[10]={"zero","two","six","seven","eight","three","four","five","nine","one"};
        char identifier[10]={'z','w','x','s','g','t','u','f','i','o'};
        int a[10]={0};  //每個數字出現的頻數 與number中順序對應
        map<int,int> relation;
        relation[0]=0;
        relation[1]=9;
        relation[2]=1;
        relation[3]=5;
        relation[4]=6;
        relation[5]=7;
        relation[6]=2;
        relation[7]=3;
        relation[8]=4;
        relation[9]=8;
        int j=0;
        for(i=0;i<10;i++){
            a[i]=character[int(identifier[i])];
            for(j=0;j<number[i].size();j++){
                character[int(number[i][j])]-=a[i];
            }
        }
        char* res=new char[100000];
        int p=0;
        char temp='0';
        for(i=0;i<10;i++){
            for(j=0;j<a[relation[i]];j++){
                res[p++]=temp;
            }
            temp++;
        }
        res[p]='\0';
        return string(res);
    }
};

從今天開始,我會公佈我的解題代碼啦。我沒有寫解釋,是因爲覺得太繁瑣,又擔心寫了那麼多還解釋不清楚,有興趣的朋友可以留言哈~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章