leetcode 423.从英文中重建数字

原题如下:

在这里插入图片描述

思路一

既然字符串中包含了一定能够完整组成若干个数字的一连串字母并且没有剩余,那么我们可以先列举出每个数字所对应的英文单词:
0-zero ; 1-one;2-two;3-three;4-four;5-five;6-six;7-seven;8-eight;9-nine
我们发现某些数字的英文单词里面有自己独有的字母,分别是:
0-z;2-w;4-u;6-x;8-g
那么第一步就是通过一个长度为26的数组先来统计各个字母的数量,找到上述五种字母的数量也就是对应的数字应有的数量,并减去本数字的英文单词里面其他字母的相应数量;
剩下的字母就属于剩下的数字了,有独特字母的是:
3-r或者h;5-f;7-s
操作同上
之后找到1-o,一顿操作后,剩下的就是9的数量了

/*借鉴lc用户 @zuo-zhou-ren 的思路,代码在整洁性上加以修改
 *作者@v7fgg
 *执行用时 :64 ms, 在所有 Java 提交中击败了9.59%的用户
 *内存消耗 :40.8 MB, 在所有 Java 提交中击败了100.00%的用户
 *2020年6月3日 14:48
 */
class Solution {
    public String originalDigits(String s) {
        int nOfD[]=new int[10];
        int zimu[]=new int[26];
        for(int i=0;i<s.length();i++){
            zimu[s.charAt(i)-'a']++;
        }
        //去掉0的字母z
        nOfD[0]=zimu['z'-'a'];
        zimu['z'-'a']-=nOfD[0];
        zimu['e'-'a']-=nOfD[0];
        zimu['r'-'a']-=nOfD[0];
        zimu['o'-'a']-=nOfD[0];
        //去掉2的字母w
        nOfD[2]=zimu['w'-'a'];
        zimu['t'-'a']-=nOfD[2];
        zimu['w'-'a']-=nOfD[2];
        zimu['o'-'a']-=nOfD[2];
        //去掉4的字母u
        nOfD[4]=zimu['u'-'a'];
        zimu['f'-'a']-=nOfD[4];
        zimu['o'-'a']-=nOfD[4];
        zimu['u'-'a']-=nOfD[4];
        zimu['r'-'a']-=nOfD[4];
        //去掉6的字母x
        nOfD[6]=zimu['x'-'a'];
        zimu['s'-'a']-=nOfD[6];
        zimu['i'-'a']-=nOfD[6];
        zimu['x'-'a']-=nOfD[6];
        //去掉8的字母g
        nOfD[8]=zimu['g'-'a'];
        zimu['e'-'a']-=nOfD[8];
        zimu['i'-'a']-=nOfD[8];
        zimu['g'-'a']-=nOfD[8];
        zimu['h'-'a']-=nOfD[8];
        zimu['t'-'a']-=nOfD[8];
        //去掉3的字母r
        nOfD[3]=zimu['r'-'a'];
        zimu['t'-'a']-=nOfD[3];
        zimu['h'-'a']-=nOfD[3];
        zimu['r'-'a']-=nOfD[3];
        zimu['e'-'a']-=2*nOfD[3];
        //去掉5的字母f
        nOfD[5]=zimu['f'-'a'];
        zimu['f'-'a']-=nOfD[5];
        zimu['i'-'a']-=nOfD[5];
        zimu['v'-'a']-=nOfD[5];
        zimu['e'-'a']-=nOfD[5];
        //去掉7的字母s
        nOfD[7]=zimu['s'-'a'];
        zimu['s'-'a']-=nOfD[7];
        zimu['e'-'a']-=2*nOfD[7];
        zimu['v'-'a']-=nOfD[7];
        zimu['n'-'a']-=nOfD[7];
        //去掉1的字母o
        nOfD[1]=zimu['o'-'a'];
        //zimu['o'-'a']-=nOfD[7];
        zimu['n'-'a']-=nOfD[1];
        zimu['e'-'a']-=nOfD[1];
        //9的字母i或者e或者n的一半
        nOfD[9]=zimu['i'-'a'];
        String ans="";
        for(int i=0;i<10;i++){
            for(int j=0;j<nOfD[i];j++){
                ans+=i;
            }
        }return ans;
    }
}
//参考资料:https://leetcode-cn.com/problems/reconstruct-original-digits-from-english/solution/ti-gong-yi-chong-zhao-gui-lu-de-si-lu-by-zuo-zhou-/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱抱抱呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值