Problem Link

Description


You are given a string s that consists of lower case English letters and brackets.

Reverse the strings in each pair of matching parentheses, starting from the innermost one.

Your result should not contain any brackets.

Β 

Example 1:

Input: s = "(abcd)"
Output: "dcba"

Example 2:

Input: s = "(u(love)i)"
Output: "iloveu"
Explanation: The substring "love" is reversed first, then the whole string is reversed.

Example 3:

Input: s = "(ed(et(oc))el)"
Output: "leetcode"
Explanation: First, we reverse the substring "oc", then "etco", and finally, the whole string.

Β 

Constraints:

  • 1 <= s.length <= 2000
  • s only contains lower case English characters and parentheses.
  • It is guaranteed that all parentheses are balanced.

Solution


Python3

class Solution:
    def reverseParentheses(self, s: str) -> str:
        N = len(s)
        res = []
        stack = []
 
        for x in s:
            if x == "(":
                stack.append([])
            elif x == ")":
                last = stack.pop()
 
                while last:
                    if stack:
                        stack[-1].append(last.pop())
                    else:
                        res.append(last.pop())
            else:
                if stack:
                    stack[-1].append(x)
                else:
                    res.append(x)
        
        return "".join(res)