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);
    }
};

从今天开始,我会公布我的解题代码啦。我没有写解释,是因为觉得太繁琐,又担心写了那么多还解释不清楚,有兴趣的朋友可以留言哈~

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