【leetcode】1190. Reverse Substrings Between Each Pair of Parentheses
题目如下:
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 bracket.
Example 1:
Input: s = "(abcd)" Output: "dcba"Example 2:
Input: s = "(u(love)i)" Output: "iloveu"Example 3:
Input: s = "(ed(et(oc))el)" Output: "leetcode"Example 4:
Input: s = "a(bcdefghijkl(mno)p)q" Output: "apmnolkjihgfedcbq"
Constraints:
0 <= s.length <= 2000
s
only contains lower case English characters and parentheses.- It's guaranteed that all parentheses are balanced.
解题思路:本题和leetcode之前出现过的四则运算的题目类似。从头开始遍历s,不是'('的字符直接入栈,如果遇到')',找出栈中最靠近栈顶的'(',逆置从'('到栈顶的所有元素,同时删除'(',直到s遍历完成为止。
代码如下:
class Solution(object): def reverseParentheses(self, s): """ :type s: str :rtype: str """ left_inx = [] stack = [] for i in s: if i == '(': stack.append(i) left_inx.append(len(stack)-1) elif i == ')': inx = left_inx.pop(-1) sub = stack[inx + 1:] sub.reverse() stack = stack[:inx] + sub else: stack.append(i) return ''.join(stack)