资讯专栏INFORMATION COLUMN

leetcode每日一题-423:从英文中重建数字

kyanag / 2454人阅读

摘要:每日一题从英文中重建数字链接从英文中重建数字题目分析首先我们先分析每个字母的组成,然后发现一些字符只在一个单词中出现,我们先去统计一下这些单词个数。统计完次数,按升序排列即可。

leetcode每日一题-423:从英文中重建数字

链接

从英文中重建数字


题目



分析



首先我们先分析每个字母的组成,然后发现一些字符只在一个单词中出现,我们先去统计一下这些单词个数。

z,w,u,x,g都只出现在一个数字中,也就是0,2,4,6,8,我们用哈希表统计一下s字符串中各个字符的数量,就可以知道0,2,4,6,8的数量,然后我们注意一下只在两个数字中出现的字符。

  • h 只在 3,8 中出现。由于我们已经知道了 8 出现的次数,因此可以计算出 3 出现的次数。
  • f 只在 4,5 中出现。由于我们已经知道了 4 出现的次数,因此可以计算出 5 出现的次数。
  • s 只在 6,7 中出现。由于我们已经知道了 6 出现的次数,因此可以计算出 7 出现的次数。

此时,只剩下1和9还不知道,但是字符含有o的其他数字我们都已经知道了,那么剩下的数量就是1的数量。

然后此时含有i的就只有9了,统计一下9的数量即可。

统计完次数,按升序排列即可。



代码

C++

我的代码

class Solution {public:    string originalDigits(string s) {        unordered_map m;        string nums[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};        string res;                for(char ch : s) m[ch]++;        // 0        if(m["z"] > 0)        {            for(int i=0 ; i 0)        {            int x = m["w"];            for(int i=0 ; i 0)        {            int x = m["u"];            for(int i=0 ; i 0)        {            int x = m["f"];            for(int i=0 ; i 0)        {            int x = m["x"];            for(int i=0 ; i 0)        {            int x = m["s"];            for(int i=0 ; i 0)        {            int x = m["g"];            for(int i=0 ; i 0)        {            int x = m["o"];            for(int i=0 ; i 0)        {            int x = m["t"];            for(int i=0 ; i 0)        {            int x = m["i"];            for(int i=0 ; i

C++

官方题解

class Solution {public:    string originalDigits(string s) {        unordered_map c;        for (char ch: s) {            ++c[ch];        }        vector 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;    }};作者:LeetCode-Solution

Java

class Solution {    public String originalDigits(String s) {        Map<Character, Integer> c = new HashMap<Character, Integer>();        for (int i = 0; i < s.length(); ++i) {            char ch = s.charAt(i);            c.put(ch, c.getOrDefault(ch, 0) + 1);        }        int[] cnt = new int[10];        cnt[0] = c.getOrDefault("z", 0);        cnt[2] = c.getOrDefault("w", 0);        cnt[4] = c.getOrDefault("u", 0);        cnt[6] = c.getOrDefault("x", 0);        cnt[8] = c.getOrDefault("g", 0);        cnt[3] = c.getOrDefault("h", 0) - cnt[8];        cnt[5] = c.getOrDefault("f", 0) - cnt[4];        cnt[7] = c.getOrDefault("s", 0) - cnt[6];        cnt[1] = c.getOrDefault("o", 0) - cnt[0] - cnt[2] - cnt[4];        cnt[9] = c.getOrDefault("i", 0) - cnt[5] - cnt[6] - cnt[8];        StringBuffer ans = new StringBuffer();        for (int i = 0; i < 10; ++i) {            for (int j = 0; j < cnt[i]; ++j) {                ans.append((char) (i + "0"));            }        }        return ans.toString();    }}作者:LeetCode-Solution

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/125058.html

相关文章

  • LeetCode 423 英文重建数字[数组] HERODING的LeetCode之路

    摘要:解题思路首先要明确一点,就是打乱的英文能够还原成数字,然后观察表格规律你就能发现,有的数字一个字母就能决定出现。所以我们从单个字母就能知晓的数字出发进行统计,用一个长度的数组来存储字母个数,然后对每一个数字一一统计,代码如下 ...

    JerryZou 评论0 收藏0
  • leetcode423. Reconstruct Original Digits from Engl

    摘要:如对应的英文表达为并继续乱序成。要求输入乱序的英文表达式,找出其中包含的所有的数字,并按照从小到大输出。思路和代码首先将数字和英文表示列出来粗略一看,我们知道有许多字母只在一个英文数字中出现,比如只出现在中。 题目要求 Given a non-empty string containing an out-of-order English representation of digits...

    kviccn 评论0 收藏0
  • leetcode每日一题-559:N叉树的最大深度

    摘要:每日一题叉树的最大深度链接叉树的最大深度题目分析简单的搜索题目。只需要从根节点开始一下整个叉树就可以得到答案了。主要是对要理解和掌握叉树的遍历。代码作者作者 lee...

    caiyongji 评论0 收藏0
  • leetcode每日一题-859:亲密字符串

    摘要:每日一题亲密字符串链接亲密字符串题目分析题目本身不是很难,但是有不少需要注意的地方,逐一来进行分析。首先如果两个字符串不一样长,那么肯定是。 leetcode每日一...

    张迁 评论0 收藏0
  • leetcode每日一题-563:二叉树的坡度

    摘要:每日一题二叉树的坡度链接二叉树的坡度题目分析简单的问题。首先明确思路,我们需要遍历每一个点,然后求出该点左右子树的值的总和,然后做差,答案累计这个差值即可。 lee...

    isLishude 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<