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

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

注意:

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

示例 1:

输入: "owoztneoer"

输出: "012" (zeroonetwo)

示例 2:

输入: "fviefuro"

输出: "45" (fourfive)

思路:观察发现,zero、two、four、six、eight中具有独一无二的字母,利map统计出每个字符的个数,求出这5个数字的个数后,剩下的有4个数字one、three、five、seven中具有独一无二的字母,最后一个数字nine的个数可以通过字母i的个数减去字母f的个数得到。

C++

class Solution {
public:
    string originalDigits(string s) 
    {
        int a[10]={0};
        int n=s.length();
        map<char,int> dic;
        for(int i=0;i<n;i++)
        {
            if(dic.count(s[i])<1)
            {
                dic.insert(pair<char,int>(s[i],1));
            }
            else
            {
                dic[s[i]]+=1;
            }
        }
        for(int i=0;i<n;i++)
        {
            if(s[i]=='z')
            {
                a[0]++;
                dic['e']--;
                dic['r']--;
                dic['o']--;
            }
            if(s[i]=='w')
            {
                a[2]++;
                dic['t']--;
                dic['o']--;
            }
            if(s[i]=='u')
            {
                a[4]++;
                dic['f']--;
                dic['o']--;
                dic['r']--;
            }
            if(s[i]=='x')
            {
                a[6]++;
                dic['s']--;
                dic['i']--;
            }
            if(s[i]=='g')
            {
                a[8]++;
                dic['e']--;
                dic['i']--;
                dic['h']--;
                dic['t']--;
            }
        }
        a[1]=dic['o'];
        a[3]=dic['t'];
        a[5]=dic['f'];
        a[7]=dic['s'];
        a[9]=dic['i']-dic['f'];
        string res;
        for(int i=0;i<10;i++)
        {
            //for(int j=0;j<a[i];j++)
            //{
            //    res.push_back(i+'0');
            //}
            res.insert(res.end(),a[i],i+'0');
        }
        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

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/82725340