欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode 423.从英文中重建数字

程序员文章站 2022-07-16 12:18:48
...

原题如下:

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-/