猿辅导2019秋招笔试题

题目好像叫解码,笔试的第一题。
字符串解压,如((ab)2c4)2abc,(ab)2解压成 abab,c4解压成cccc,括号里面的字符要按照括号外面的数字进行翻倍。
在这里插入图片描述
我们可以用一个列表来解决这个问题。把这个字符串的每一个字符存在这个列表中,然后我们逐一检查列表。
遇到每一个右括号,我们就记录右括号后面的数字num和两个括号中间的字符串。
在这里插入图片描述
字符串进行复制之后我们还需要把这些字符串插入回去。
遇到数字直接把数字前面的单一字符翻倍就可以了
在这里插入图片描述
这样遍历一次我们就已经把所有的字符串都解压完毕了,很简单的一个题,当时太紧张没有A出来。

代码

s = '(((ab)2c4)2abc)3'
stack = [i for i in s]
output =""
i = 0
while i<len(stack):                              
    if stack[i] == ')':  					   #找到右括号开始往前走		  
        tmp = ""								
        j = i-1								
        while stack[j]!='(':    			  #往前找到对称的括号 取中间的内容
            tmp = stack[j]+tmp
            j-=1
        tmp = tmp*(int(stack[i+1])-1)        
        for k in i+1,i,j:						#从后往前把符号和数字都扔掉
            stack.pop(k)
        stack = stack[:j]+[i for i in tmp]+stack[j:]
    if stack[i].isdigit():  					#如果是数字直接翻倍
        st = [i for i in stack[i-1]*(int(stack.pop(i))-1)]
        stack = stack[:i]+st+stack[i:]
    i+=1      
fi = "".join(stack)
fi

比较着急没有写括号后面是两位数的情况= =。就在你找到右括号往右取数字的时候一直找到不是数字的那个值之前就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值