leetcode 423 从英文中重建数字

https://leetcode-cn.com/problems/reconstruct-original-digits-from-english/

题目

给你一个字符串s,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按升序返回原始的数字。

示例1

输入:s = "owoztneoer"
输出:"012"
注:s可以调整顺序为"zeroonetwo",即012

示例2

输入:s = "fviefuro"
输出:"45"
注:s可以调整顺序为"fourfive",即45
思路1

比较奇葩的一个找规律题目。我们可以分析0~9这数字所对应单词中包含的字母:

one two three four five six seven eight nine

可以发现zwuxg各自只会在一种数字中出现。因此,我们统计这几种字母的数目的话,就可以推出相应数字的出现次数:

unordered_map<char, int> c;
for (char ch: s) {
    ++c[ch];
}

vector<int> cnt(10);
cnt[0] = c['z'];
cnt[2] = c['w'];
cnt[4] = c['u'];
cnt[6] = c['x'];
cnt[8] = c['g'];

那么同理,hfs分别只在3&84&56&7中出现,由于上面我们已经推出了846的出现次数,因此现在可以得到357的出现次数:

cnt[3] = c['h'] - cnt[8];
cnt[5] = c['f'] - cnt[4];
cnt[7] = c['s'] - cnt[6];

出现三次、四次的推导类似,这里不再重复阐述。最终代码如下:

string originalDigits(string s) {
    unordered_map<char, int> c;
    for (char ch: s) {
        ++c[ch];
    }

    vector<int> cnt(10);
    cnt[0] = c['z'];
    cnt[2] = c['w'];
    cnt[4] = c['u'];
    cnt[6] = c['x'];
    cnt[8] = c['g'];

    cnt[3] = c['h'] - cnt[8];
    cnt[5] = c['f'] - cnt[4];
    cnt[7] = c['s'] - cnt[6];

    cnt[1] = c['o'] - cnt[0] - cnt[2] - cnt[4];

    cnt[9] = c['i'] - cnt[5] - cnt[6] - cnt[8];

    string ans;
    for (int i = 0; i < 10; ++i) {
        for (int j = 0; j < cnt[i]; ++j) {
            ans += char(i + '0');
        }
    }
    return ans;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值