leetcode 423. 从英文中重建数字python

这篇博客介绍了如何使用Python解决LeetCode问题,通过两个解法实现将英文单词转换为数字,特别关注了处理多个相同数字和特殊字符的情况。作者提供了两种思路,一个是逐词匹配,另一个是利用字符计数和特殊字符顺序来识别数字。

题目描述:

 题解一:未通过

1.word_to_num保存对应位置数字对应的单词。

2.在输入s中,从word_to_num第一个位置单词开始,如果可以找到,则向nums加入对应数字。

3.将nums中结果以字符串形式输出。

结果:未通过,没有考虑到同一个数字出现多次的情况

class Solution(object):
    def originalDigits(self, s):
        word_to_num = ["zero","one","two","three","four",
                       "five","six","seven","eight","nine"]
        nums = []
        for word in word_to_num:
            wordlen = len(word)
            flag = 0
            for j in range(wordlen):
                if s.find(word[j])!=-1:
                    flag = flag+1
            if flag==wordlen:
                nums.append(str(word_to_num.index(word)))
        result = "".join(nums)
        return result

 

题解二:

参考LeetCode-Python-423. 从英文中重建数字_Keep Coding-CSDN博客

1.先考虑特殊单词,即该单词中有的字母只在该单词中存在,如zero的z,two的w,four的u,six的x。find保存单词中的特殊字符(每个单词选择的字符都不同)。digit记录对应数字顺序。

2.利用counter dic记录输入s中各个字母的出现次数。

3.按照find中字符顺序,dic[find[i]]即为数字digit[i]出现次数,记录之后从dic中删除digit[i]所有字母(避免重复记录情况)

class Solution(object):
    def originalDigits(self, s):
        order = ["zero", "two", "four", "six", "one", "three", "five", "seven", "eight", "nine"]
        find = ['z','w',"u","x","o","r","f","v","t","e"]
        digit = [0,2,4,6,1,3,5,7,8,9]
        record = [0 for i in range(10)]
        dic = collections.Counter(s)
        print(dic)
        for idx in range(10):
            cnt = dic[find[idx]]
            record[digit[idx]]+=cnt
            dic = dic - collections.Counter(order[idx]*cnt)
            if not dic:
                break
        res = ""
        for i in range(10):
            res += str(i)*record[i]
        return res

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值