题目描述:

题解一:未通过
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

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

1535

被折叠的 条评论
为什么被折叠?



