Leetcode --- 1190 反转没对括号间的字符串 (python 栈)

反转没对括号间的字符串

给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。

注意,您的结果中 不应 包含任何括号。
示例 1:

输入:s = "(abcd)"
输出:"dcba"

示例2:

输入:s = "(u(love)i)"
输出:"iloveu"

示例 3:

输入:s = "(ed(et(oc))el)"
输出:"leetcode"

示例 4:

输入:s = "a(bcdefghijkl(mno)p)q"
输出:"apmnolkjihgfedcbq"

思路

  1. 我们可以用两个栈来做这道题,首先一个栈用来找到“()”,一个栈用来反转
  2. 如果我们找到“)”,我们将栈顶弹出,进入用来反转的栈,直到碰到“(”。
  3. 再弹出栈顶,去掉“(”。
  4. 接着我们再把反转的栈依次弹出栈底(相当于队列),进入第一个栈。
  5. 遍历所有字符串,最后返回栈的内容

问题

  1. 在刚开始的时候一直用while stack and ")" == s[i]这个会使当stack为空的时候,“)”进栈,进入while stack[-1] != "("循环中,出现pop了空栈,从而报错。
  2. 第二个问题是while stack[-1] != "("循环中没有考虑到最后要弹出“(”,彻底的把括号去掉。
class Solution:
    def reverseParentheses(self, s: str) -> str:
        stack = []
        temp = []
        for i in range(len(s)):
            if ")"== s[i]:
                while stack[-1]!='(':
                    temp.append(stack.pop())
                stack.pop()
                while temp:
                    stack.append(temp.pop(0))
            else:
                stack.append(s[i])
        return "".join(stack)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值