leetcode423. 从英文中重建数字

题目链接:https://leetcode-cn.com/problems/reconstruct-original-digits-from-english/

题意:给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9。按升序输出原始的数字。

注意:

输入只包含小写英文字母。
输入保证合法并可以转换为原始的数字,这意味着像 "abc" 或 "zerone" 的输入是不允许的。
输入字符串的长度小于 50,000。

方法: 0-9每个英文单词的字符数目是固定的,有的字符甚至是某些单词独有的,可以根据字符的数目加上哈希表来判断。

class Solution {
public:
    string originalDigits(string s) {
        string ret;
        unordered_map<char,int> mpC;

        for(int i=0;i<s.size();i++){
            mpC[s[i]]++;
        }

        unordered_map<int,int> mpN;

        mpN[0] = mpC['z'];//有多少z就有多少0
        mpN[2] = mpC['w'];//有多少w就有多少2
        mpN[4] = mpC['u'];//有多少u就有多少4
        mpN[6] = mpC['x'];//有多少x就有多少6
        mpN[8] = mpC['g'];//有多少g就有多少8

        mpN[3] = mpC['h']-mpN[8];//3里的h数目等于总的h数目减去8里的h数目
        mpN[5] = mpC['f']-mpN[4];//5里的f数目等于总的f数目减去4里的f数目
        mpN[7] = mpC['s']-mpN[6];//7里的s数目等于总的s数目减去6里的s数目

        mpN[9] = mpC['i']-mpN[5]-mpN[6]-mpN[8];
        //9里的i的数目等于总的i的数目减去5的、6的和8的
        mpN[1] = mpC['n']-mpN[7]-2*mpN[9];
        //1里的n的数目等于总的n的数目减去7的和9的

        for(int i=0;i<=9;i++){
            while(mpN[i]>0){
                mpN[i]--;
                ret=ret+to_string(i);
            }
        }

        return ret;

    }

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值