1190. 反转每对括号间的子串

1190. 反转每对括号间的子串

给出一个字符串 s(仅含有小写英文字母和括号)。

请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。

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

借助括号匹配思路,每匹配到一对括号,将其反转

class Solution:
    def reverseParentheses(self, s: str) -> str:
        def reverse(s,l,r):
            while l < r:
                tmp = s[l]
                s[l] = s[r]
                s[r] = tmp
                l += 1
                r -= 1

        #每遇到一对括号,反转一次
        stack = []
        s = list(s)
        for i in range(len(s)):
            if s[i] == '(':
                stack.append(i)
            if s[i] == ')':
                reverse(s,stack.pop()+1,i-1)

        res = []
        for c in s:
            if c != "(" and c != ")":
                res.append(c)
        return "".join(res)

逐层反转

(a(sd)f)为例,先处理sd,反转后得到下一个右括号前的新子串adsf,匹配到右括号后再进行一次反转

class Solution:
    def reverseParentheses(self, s: str) -> str:
        stack = []
        subs = ""
        for c in s:
            if c == "(":
                stack.append(subs)
                subs = ""
            elif c == ")":
                subs = stack.pop()+"".join(reversed(subs))
            else:
                subs += c
        return subs
posted @ 2021-05-26 09:15  鱼与鱼  阅读(81)  评论(0编辑  收藏  举报