鱼C论坛

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

Python:每日一题 380

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

第二种方法输入示例 2 的数据出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

空字符是不是输出‘ ’?
def f380(s):
    if not s:return " "
    res = ''
    for i in range(len(s)):
        if s[i].isdigit():
            res += '+' + s[i] + '*'
        elif s[i] == '[':
            res += '('
        elif s[i] == ']':
            res += ')'
        else:
            res += '+1*%s' %repr(s[i])
    return eval(res)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        
def find_min_words(code):
    pos_left=[0] #储存'['的位置
    pos_right=[0] #储存']'的位置
    
    for i in range(len(code)):
        if code[i] == "[":
            pos_left.append(i)
        if code[i] == "]":
            pos_right.append(i)

    #寻找最深的重复内容
    pos_change_min=len(code)
    pos_L=0
    pos_R=0
    for i in pos_left:
        for j in pos_right:
            if 0<(j-i)<pos_change_min:
                pos_change_min=(j-i)
                pos_L=i
                pos_R=j
    min_words = code[pos_L+1:pos_R]

    #记录重复次数
    num = ''
    num_start = pos_left[pos_left.index(pos_L)-1]
    num_end = pos_L
    dig_start=0
    flag=0
    for i in range(num_start,num_end):
        if code[i].isdigit():
            if flag == 0:
                flag = 1
                dig_start = i
            num+=code[i]

    #解码,更改原字符串
    res=code[:dig_start]+int(num)*min_words+code[pos_R+1:]
    
    return res
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

输入 "3[a]2[b4[F]c]" 结果有误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 17:29:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

输入 "3[a]2[bc]" 出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 17:32:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> 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]]" 超出时间限制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 17:38:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好吧,忽略掉了大写的情况,已改
import re
def fun380(s):
    try:
        d=re.search('\d+',s).group()
        while len(d):
            a,b=re.search('(\d+)\[([a-zA-Z]+)\]',s).groups()
            s=s.replace(a+'['+b+']',int(a)*b)
    except:
        return s

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-20 21:55:02 | 显示全部楼层
@zltzlt  楼主已写完 见10楼 您测测速
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

输入空字符串的话难道不算输入不合法吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 23:52:32 | 显示全部楼层
def f380(s):
    if not s:
        return ''
    while s.find('[') + 1:
        after = s.find(']')
        before = s[:after].rfind('[')
        rptnum = rptstr = ''
        n = 0
        while 1:
            n += 1
            if '0' <= s[before-n] <= '9':
                rptnum = s[before-n] + rptnum
            else:
                break
        rptstr = s[before+1:after]
        s = s.replace(s[before-len(rptnum):after+1], int(rptnum)*rptstr, 1)
    return s

评分

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

查看全部评分

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

使用道具 举报

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

输入以下数据超时:
'sdfjng56[sdnfher234[sf3[sdfdfg5[effgd4[fsdalll4[asd3[asd3[dfgdfgdfg]]]]]]]]'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2020-4-21 17:52:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 11:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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