鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: zltzlt

Python:每日一题 380

[复制链接]
 楼主| 发表于 2020-4-20 13:35:23 | 显示全部楼层

第二种方法输入示例 2 的数据出错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 13:47:45 | 显示全部楼层
zltzlt 发表于 2020-4-20 13:33
输入空字符串出错

空字符是不是输出‘ ’?
  1. def f380(s):
  2.     if not s:return " "
  3.     res = ''
  4.     for i in range(len(s)):
  5.         if s[i].isdigit():
  6.             res += '+' + s[i] + '*'
  7.         elif s[i] == '[':
  8.             res += '('
  9.         elif s[i] == ']':
  10.             res += ')'
  11.         else:
  12.             res += '+1*%s' %repr(s[i])
  13.     return eval(res)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 16:47:44 | 显示全部楼层
  1. def f380(code):
  2.     while ("[" in code) or ("]" in code):
  3.         code = find_min_words(code)
  4.     return code

  5.         
  6. def find_min_words(code):
  7.     pos_left=[0] #储存'['的位置
  8.     pos_right=[0] #储存']'的位置
  9.    
  10.     for i in range(len(code)):
  11.         if code[i] == "[":
  12.             pos_left.append(i)
  13.         if code[i] == "]":
  14.             pos_right.append(i)

  15.     #寻找最深的重复内容
  16.     pos_change_min=len(code)
  17.     pos_L=0
  18.     pos_R=0
  19.     for i in pos_left:
  20.         for j in pos_right:
  21.             if 0<(j-i)<pos_change_min:
  22.                 pos_change_min=(j-i)
  23.                 pos_L=i
  24.                 pos_R=j
  25.     min_words = code[pos_L+1:pos_R]

  26.     #记录重复次数
  27.     num = ''
  28.     num_start = pos_left[pos_left.index(pos_L)-1]
  29.     num_end = pos_L
  30.     dig_start=0
  31.     flag=0
  32.     for i in range(num_start,num_end):
  33.         if code[i].isdigit():
  34.             if flag == 0:
  35.                 flag = 1
  36.                 dig_start = i
  37.             num+=code[i]

  38.     #解码,更改原字符串
  39.     res=code[:dig_start]+int(num)*min_words+code[pos_R+1:]
  40.    
  41.     return res
  42.         

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 17:28:24 | 显示全部楼层

输入 "3[a]2[b4[F]c]" 结果有误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 17:29:51 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 17:30:36 | 显示全部楼层

输入 "3[a]2[bc]" 出错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 17:32:22 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 17:36:10 | 显示全部楼层
kkk999de 发表于 2020-4-20 09:55
def f380(s):
    a,b = s.find('['),s.find(']')
    s = s[:a-1]+s[a+1:b]*int(s[a-1])+s

输入 "3[a2[c]]" 超出时间限制
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 17:38:19 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 20:46:30 | 显示全部楼层
zltzlt 发表于 2020-4-20 17:28
输入 "3[a]2c]" 结果有误

好吧,忽略掉了大写的情况,已改
  1. import re
  2. def fun380(s):
  3.     try:
  4.         d=re.search('\d+',s).group()
  5.         while len(d):
  6.             a,b=re.search('(\d+)\[([a-zA-Z]+)\]',s).groups()
  7.             s=s.replace(a+'['+b+']',int(a)*b)
  8.     except:
  9.         return s
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 21:55:02 | 显示全部楼层
@zltzlt  楼主已写完 见10楼 您测测速
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 23:51:27 | 显示全部楼层
zltzlt 发表于 2020-4-20 13:33
输入空字符串出错

输入空字符串的话难道不算输入不合法吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 23:52:32 | 显示全部楼层

  1. def f380(s):
  2.     if not s:
  3.         return ''
  4.     while s.find('[') + 1:
  5.         after = s.find(']')
  6.         before = s[:after].rfind('[')
  7.         rptnum = rptstr = ''
  8.         n = 0
  9.         while 1:
  10.             n += 1
  11.             if '0' <= s[before-n] <= '9':
  12.                 rptnum = s[before-n] + rptnum
  13.             else:
  14.                 break
  15.         rptstr = s[before+1:after]
  16.         s = s.replace(s[before-len(rptnum):after+1], int(rptnum)*rptstr, 1)
  17.     return s
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 17:47:27 | 显示全部楼层
fan1993423 发表于 2020-4-20 20:46
好吧,忽略掉了大写的情况,已改

输入以下数据超时:

  1. 'sdfjng56[sdnfher234[sf3[sdfdfg5[effgd4[fsdalll4[asd3[asd3[dfgdfgdfg]]]]]]]]'
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 17:49:38 | 显示全部楼层
TJBEST 发表于 2020-4-19 22:33
递归函数做的我想应该不超时

1064 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 17:52:48 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-18 19:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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