心路历程:
这道题看到括号直接想到栈,五分钟新题直接秒了,一开始以为需要两个栈分别存储数字和非数字,后来发现一个栈就够了,思路如图:
这道题考察的应该是队栈这两种数据结构的转换,因为每次字符串和数字都需要反过来,并且最后的结果其实是按队列出来的
注意的点:
1、注意字符串和数字pop出来之后需要用[::-1]取个反
2、string.isdigit()是用来判断string里是否只包含整数数字的(有小数点也会返回False)
解法:栈
class Solution:def decodeString(self, s: str) -> str:# 考察栈的,搞一个栈即可from collections import dequesk = deque([]) for cha in s:if cha != ']': sk.append(cha)else: # 先pop字符串(反过来)再pop数字(反过来),然后再放回去temp, num = [], ''while sk[-1] != '[': temp.append(sk.pop())temp = temp[::-1] # 反过来,注意这里最好temp用列表比较好sk.pop() # [ 出栈,开始pop数字while sk and sk[-1].isdigit(): num += sk.pop()num = int(num[::-1])sk.append(''.join(temp * num))return ''.join(sk)