(leetcode)Python字符串解码

(leetcode)Python字符串解码

题目
在这里插入图片描述

题目大意

要求我们输出一个新的字符串,被中括号包起来的字符串数量要乘以左中括号前面的数字,例如"3[a]",在输出的字符串中应该为"aaa"。

如果有多重中括号包围,就先算里面的,再算外面的,例如"3[a2[b]]",它的解码步骤为:

  1. “2[b]”→"bb",得到"3[abb]";
  2. “3[abb]”→"abbabbabb"。

解决方法

这个问题的难点主要在于以下两点:

  • 如何让[]和数字表现出它们的功能。
  • 如何解决多重嵌套的问题

为了解决以上问题,可以运用有关栈的方法,用于将循环所经过的信息给先储存起来。

现在假设输入的s是"3[a]"。

#首先创建一个栈和两个变量
stack = []   #建立空栈,储存中括号更外层信息
num = 0      #储存数字
result = ""   #储存字符,在最后可作为返回结果

解码得从最里面的中括号开始进行,所以说,循环遇到‘[’时,要将这之前所储存的数字和字符都存入栈中,这样才能在遇到’]'时直接进行解码。

#开始循环
for ch in s:
    
    #当遇到的是数字时
    if ch.isdigit():
        num = num*10+int(ch)
	#根据该公式可顺利将个位数和以外的数转换,比如"30"、"100"。
    
    #当遇到了"["与"]"
    elif ch == '[':     
        stack.append((result,num))  #将字符与数字打包,入栈
        result = ""      #字符与数字清零
        num = 0
	elif ch == ']':    
        w,s = stack.pop()
        result = s+int(w)*m #这里要注意顺序不能搞反
    
    #遇到字母时,直接加入result
    else:
        result += ch
return result

比如当s=”aa4[3[bc]]“,当遇到了’]‘时,可以保证最起码前面有一个’[’,而且在这之前的"aa4[3"都被打包送进了栈中,也就是说当下情况为:

stack:[(‘aa’,4),(,3)];num :0;result:“bc”

这时便可以进行解码。根据以上代码,通过pop函数弹出(,3),此时:

stack→[(‘aa’,4)],并得到w="",m=3。

之后便可得到一个result=“bcbcbc”,之后的步骤也如上所述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值