鱼C论坛

 找回密码
 立即注册
查看: 2310|回复: 40

[已解决]Python:每日一题 384

[复制链接]
发表于 2020-4-26 13:33:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天的题目:


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

注意:1. 输入只包含小写英文字母。
2. 输入保证合法并可以转换为原始的数字,例如不会出现类似于 "abc" 或 "zerone" 的输入。

示例 1:

输入:"owoztneoer"
输出:"012" (zeroonetwo)
示例 2:

输入:"fviefuro"
输出:"45" (fourfive)


欢迎大家一起答题!
最佳答案
2020-4-26 19:01:01
  1. def f384(s):
  2.     return '0'*s.count('z')+'1'*(s.count("o") - s.count('z')- s.count('w') - s.count('u'))+'2'*s.count('w')+'3'*(s.count("h") - s.count('g'))+'4'*s.count('u')+'5'*(s.count('f') - s.count('u'))+'6'*s.count('x')+'7'*(s.count('s') - s.count('x'))+'8'*s.count('g')+'9'*(s.count("i") - s.count('f') + s.count('u') -s.count('x') -s.count('g'))
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-26 13:38:16 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-4-26 14:16 编辑

直接看题解了
  1. class Solution:
  2.     def originalDigits(self, s: str) -> str:
  3.         map=collections.Counter(s);
  4.         map=[map['z'],map['o'],map['w'],map['t'],map['r'],map['v'],map['x'],map['s'],map['g'],map['i']]
  5.         map[3]-=map[8]+map[2]
  6.         map[4]-=map[3]+map[0]
  7.         map[7]-=map[6]
  8.         map[1]-=map[4]+map[2]+map[0]
  9.         map[5]-=map[7]
  10.         map[9]-=map[8]+map[6]+map[5]
  11.         return ''.join(i.__str__()*j for i,j in enumerate(map))
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 13:49:49 | 显示全部楼层
沙发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-26 13:55:13 | 显示全部楼层
本帖最后由 kinkon 于 2020-4-27 11:38 编辑

看了鱼友的发的发的帖子,发现差距还是很大的,都是快准狠,我只能暴力。
解法一:计数
  1. def f384(arr):
  2.    
  3.     carr = Counter(arr)
  4.    
  5.     a0 = '0'* carr.get('z', 0)
  6.     a1 = '1'* min(carr.get('o', 0), carr.get('n', 0), carr.get('e', 0))
  7.     a2 = '2'* carr.get('w', 0)
  8.     a3 = '3'* min(carr.get('t', 0), carr.get('h', 0), carr.get('r', 0), carr.get('e', 0))
  9.     a4 = '4'* carr.get('u', 0)
  10.     a5 = '5'* min(carr.get('f', 0), carr.get('i', 0), carr.get('v', 0), carr.get('e', 0))
  11.     a6 = '6'* carr.get('x', 0)
  12.     a7 = '7'* min(carr.get('s', 0), carr.get('e', 0), carr.get('v', 0), carr.get('n', 0))
  13.     a8 = '8'* carr.get('g', 0)
  14.     a9 = '9'* min(carr.get('n', 0), carr.get('i', 0), carr.get('e', 0))
  15.    
  16.     return a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9
复制代码


解法二,时间O(N3),估计也超时了
  1. def f384(arr):#带重复的暴力
  2.    
  3.     dic = {'zero':'0', 'one':'1', 'two':'2', 'three':'3', 'four':'4',
  4.            'five':'5', 'six':'6', 'seven':'7', 'eight':'8', 'nine':'9'}

  5.     carr = Counter(arr)
  6.     ans = ''
  7.     for val, n in dic.items():
  8.         if all(v in carr for v in val):
  9.             count = float('inf')
  10.             for v in val:
  11.                 count = min(carr[v], count)
  12.             #print(v, carr[v], count)   
  13.             ans += n * count
  14.     return ans
复制代码


再来一个,还是暴力(有优化空间)
  1. def f384(arr):
  2.    
  3.     dic = {'zero':'0', 'one':'1', 'two':'2', 'three':'3', 'four':'4',
  4.            'five':'5', 'six':'6', 'seven':'7', 'eight':'8', 'nine':'9'}

  5.     carr = Counter(arr)
  6.     ans = ''
  7.     while carr:
  8.         for val, n in dic.items():
  9.             temp = Counter(val)
  10.             if not(temp - carr):               
  11.                 ans += n
  12.                 carr -= temp
  13.                 break
  14.     return ans
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 13:56:22 | 显示全部楼层

十一分钟过去了……还沙发呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 14:02:25 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-4-26 13:56
十一分钟过去了……还沙发呢

  刚刚不小心看研究题目   才反应过来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 14:04:10 | 显示全部楼层
本帖最后由 March2615 于 2020-4-26 14:31 编辑
  1. def daily384(s: str) -> str:
  2.     # 解题思路:
  3.     # z只有zero,w只有two,u只有four,x只有six,g只有eight,...
  4.     # 寻找顺序:0(z)->2(w)->4(u)->6(x)->8(g)
  5.     # ->7(s-6(x))->5(f-4(u))->3(h-8(g))
  6.     # ->1(o-0(z)-2(w)-4(f))->9(i-5(f-4(u))-6(x)-8(g))
  7.     # 因为输入一定是正确的,所以只需要数特定字符的格数即可知道数字的个数
  8.     num = [0]*10
  9.     num[0] = s.count('z')
  10.     num[2] = s.count('w')
  11.     num[4] = s.count('u')
  12.     num[6] = s.count('x')
  13.     num[8] = s.count('g')
  14.     num[7] = s.count('s') - num[6]
  15.     num[5] = s.count('f') - num[4]
  16.     num[3] = s.count("h") - num[8]
  17.     num[1] = s.count("o") - num[0] - num[2] - num[4]
  18.     num[9] = s.count("i") - num[5] - num[6] - num[8]

  19.     return ''.join(str(i)*num[i] for i in range(len(num)))
复制代码

实在不好意思说动过脑了
写的也太丑了,不过胜在好理解

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 4 反对 0

使用道具 举报

发表于 2020-4-26 14:08:37 | 显示全部楼层
想问一下,数字可以重复吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 14:59:00 | 显示全部楼层
Twilight6 发表于 2020-4-26 14:08
想问一下,数字可以重复吗?

可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 15:01:48 | 显示全部楼层
  1. num_dict = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four',
  2. 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'}

  3. def P384(s):
  4.     num_str = []
  5.     num_int = []
  6.     for i in s:
  7.         num_str.append(i)
  8.         
  9.     for i in num_dict:
  10.         for each in num_dict[i]:
  11.             if each not in num_str:
  12.                 break
  13.         else:
  14.             for each in num_dict[i]:
  15.                 num_str.remove(each)
  16.             num_int.append(i)
  17.     for i in num_int:
  18.         print(i,end='')
  19.         
  20. s = input()
  21. P384(s)
复制代码

萌新求大佬赐教

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 16:22:54 | 显示全部楼层
本帖最后由 xiangjianshinan 于 2020-4-26 16:24 编辑

我也来:20200426 16:24
  1. da = {0:'zero',1:'one',2:'two',3:'three',4:'four',5:'five',6:'six',7:'seven',8:'eight',9:'nine'}
  2. def timu384(s):
  3.     la = list(s)
  4.     outstr = ''
  5.     for i in range(10):
  6.         ba = True
  7.         while ba:
  8.             lta = la[:]
  9.             for j in da.get(i):
  10.                 if j in lta:
  11.                     lta.remove(j)
  12.                 else:
  13.                     ba= False
  14.                     break
  15.             else:
  16.                 outstr = outstr + str(i)
  17.                 la = lta[:]   
  18.     return outstr
  19. print(timu384('owoztneoer'))
  20. print(timu384('fviefuro'))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 16:34:20 | 显示全部楼层
  1. # 0->zero->z
  2. # 2->two->w
  3. # 4->four->u
  4. # 6->six->x
  5. # 8->eight->g
  6. #
  7. # 3->three-> t
  8. # 5->five-> f
  9. # 7->seven-> s
  10. #
  11. # 1->one-> -
  12. # 9->nine->-
  13. # 依据单词中出现的字母的独特性进行分类
  14. # 一级特征字母为 z(0) w(2) u(4) x(6) g(8)
  15. # 二级特征字母为 t(3) f(5) s(7)
  16. # 三级特征字母为 o(1) i(9)
  17. num_name = ['zero', 'one', 'two', 'three', 'four',
  18.             'five','six', 'seven', 'eight', 'nine']
  19. def f384(s):
  20.     level_1 = {'z':0,'w':2,'u':4,'x':6,'g':8}
  21.     level_2 = {'t':3,'f':5,'s':7}
  22.     level_3 = {'o':1,'i':9}


  23.     res=""
  24.     (res,s)=remove_letter(level_1, s,res)
  25.     (res,s)=remove_letter(level_2, s,res)
  26.     (res,s)=remove_letter(level_3, s,res)


  27.     tmp = list(res)
  28.     tmp.sort()
  29.     res = "".join(tmp)
  30.     return res

  31. def remove_letter(level,s,res):
  32.     for i in level:
  33.         if i in s:
  34.             res += str(level[i])
  35.             for j in num_name[level[i]]:
  36.                 s = s.replace(j, "", 1)
  37.     return (res,s)


  38. if __name__ == "__main__":
  39.     s="fviefuro"
  40.     print(f384(s))
  41.     s="owoztneoer"
  42.     print (f384(s))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 18:16:15 | 显示全部楼层
March2615 发表于 2020-4-26 14:04
实在不好意思说动过脑了
写的也太丑了,不过胜在好理解

这个思路巧哦,比暴力硬算要快的多,我也正想从字母下手呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 18:34:25 | 显示全部楼层
fan1993423 发表于 2020-4-26 18:16
这个思路巧哦,比暴力硬算要快的多,我也正想从字母下手呢

本来想写一个字符串相减的函数的,写着写着发现不如数个数来的快
幸好0就有特有的z,不然还真不一定想得到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 19:01:01 | 显示全部楼层    本楼为最佳答案   
  1. def f384(s):
  2.     return '0'*s.count('z')+'1'*(s.count("o") - s.count('z')- s.count('w') - s.count('u'))+'2'*s.count('w')+'3'*(s.count("h") - s.count('g'))+'4'*s.count('u')+'5'*(s.count('f') - s.count('u'))+'6'*s.count('x')+'7'*(s.count('s') - s.count('x'))+'8'*s.count('g')+'9'*(s.count("i") - s.count('f') + s.count('u') -s.count('x') -s.count('g'))
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 19:47:51 | 显示全部楼层
占位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-27 10:03:15 | 显示全部楼层
  1. def f(s):
  2.     zero = s.count('z')
  3.     two = s.count('w')
  4.     four = s.count('u')
  5.     six = s.count('x')
  6.     eight = s.count('g')
  7.     one = s.count('o')
  8.     three = s.count('h')
  9.     five = s.count('f')
  10.     seven = s.count('s')
  11.     nine = s.count('i')
  12.     return '0'*zero+'1'*(one-four-two-zero)+'2'*two+'3'*(three-eight)+'4'*four+'5'*(five-four)+'6'*six+'7'*(seven-six)+'8'*eight+'9'*(nine-five-eight-six)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-27 13:20:24 | 显示全部楼层
kinkon 发表于 2020-4-26 13:55
看了鱼友的发的发的帖子,发现差距还是很大的,都是快准狠,我只能暴力。
解法一:计数

三段代码输入 "zeroonetwothreefourfivesixseveneightnine" 都有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-27 13:28:16 | 显示全部楼层
March2615 发表于 2020-4-26 14:04
实在不好意思说动过脑了
写的也太丑了,不过胜在好理解

36 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-27 13:30:14 | 显示全部楼层

输入 'zerozero' 应该输出 '00'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 06:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表