LeetCode 423. 从英文中重建数字(C++、python)

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

注意:

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

示例 1:

输入: "owoztneoer"

输出: "012" (zeroonetwo)

示例 2:

输入: "fviefuro"

输出: "45" (fourfive)

C++

class Solution {
public:
    string originalDigits(string s) 
    {
        map<char,int> tmp;
        int n=s.length();
        for(int i=0;i<n;i++)
        {
            tmp[s[i]]++;
        }
        map<char,int> vec;
        int num;
        if(tmp['z'])
        {
            num=tmp['z'];
            vec['0']=num;
            tmp['e']-=num;
            tmp['r']-=num;
            tmp['o']-=num;
            tmp['z']=0;
        }
        if(tmp['w'])
        {
            num=tmp['w'];
            vec['2']=num;
            tmp['t']-=num;
            tmp['o']-=num;
            tmp['w']=0;
        }
        if(tmp['x'])
        {
            num=tmp['x'];
            vec['6']=num;
            tmp['s']-=num;
            tmp['i']-=num;
            tmp['x']=0;
        }
        if(tmp['u'])
        {
            num=tmp['u'];
            vec['4']=num;
            tmp['f']-=num;
            tmp['o']-=num;
            tmp['r']-=num;
            tmp['u']=0;
        }
        if(tmp['o'])
        {
            num=tmp['o'];
            vec['1']=num;
            tmp['n']-=num;
            tmp['e']-=num;
            tmp['o']=0;
        }
        if(tmp['f'])
        {
            num=tmp['f'];
            vec['5']=num;
            tmp['i']-=num;
            tmp['v']-=num;
            tmp['e']-=num;
            tmp['f']=0;
        }
        if(tmp['v'])
        {
            num=tmp['v'];
            vec['7']=num;
            tmp['s']-=num;
            tmp['n']-=num;
            tmp['e']-=2*num;
            tmp['v']=0;
        }
        if(tmp['r'])
        {
            num=tmp['r'];
            vec['3']=num;
            tmp['t']-=num;
            tmp['h']-=num;
            tmp['e']-=2*num;
            tmp['r']=0;
        }
        if(tmp['g'])
        {
            num=tmp['g'];
            vec['8']=num;
            tmp['n']-=num;
            tmp['i']-=num;
            tmp['h']-=num;
            tmp['t']-=num;
            tmp['g']=0;
        }
        if(tmp['i'])
        {
            vec['9']=tmp['i'];
        }
        string res="";
        for(auto it:vec)
        {
            for(int i=0;i<it.second;i++)
            {
                res+=it.first;
            }
        }
        return res;
    }
};

python

class Solution:
    def originalDigits(self, s):
        """
        :type s: str
        :rtype: str
        """
        #dic={}
        dic={'e':0,'f':0,'g':0,'h':0,'i':0,'n':0,'o':0,'r':0,'s':0,'t':0,'u':0,'v':0,'w':0,'x':0,'z':0}
        n=len(s)
        a=[0 for i in range(10)]
        for i in range(0,n):
            #if s[i] not in dic:
            if dic[s[i]]==0:
                dic[s[i]]=1
            else:
                dic[s[i]] += 1
        for i in range(0,n):
            if s[i]=='z':
                a[0] += 1
                dic['e'] -= 1
                dic['r'] -= 1
                dic['o'] -= 1
            if s[i]=='w':
                a[2] += 1
                dic['t'] -= 1
                dic['o'] -= 1
            if s[i]=='u':
                a[4] += 1
                dic['f'] -= 1
                dic['o'] -= 1
                dic['r'] -= 1
            if s[i]=='x':
                a[6] += 1
                dic['s'] -= 1
                dic['i'] -= 1
            if s[i]=='g':
                a[8] += 1
                dic['e'] -= 1
                dic['i'] -= 1
                dic['h'] -= 1
                dic['t'] -= 1
        a[1]=dic['o']
        a[3]=dic['t']
        a[5]=dic['f']
        a[7]=dic['s']
        a[9]=dic['i']-dic['f']
        res=''
        for i in range(0,10):
            res += str(i)*a[i]
        return res

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值