1190.反转每对括号间的子串
https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-parentheses/
难度:中等
题目:
给出一个字符串 s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应 包含任何括号。
提示:
- 0 <= s.length <= 2000
- 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"
分析
遇到类似括号等问题的,使用栈操作是最简单和最容易理解的方式。
维护一个栈,然后除了右括号,的字符都入栈。
当遇到右括号是开始循环出栈,加入一个临时列表,直到遇到左括号停止,并将左括号出栈。
在将临时表入栈,继续下一次操作...
最后将列表进行拼接,就可以完成所有代码了。
解题:
class Solution: def reverseParentheses(self, s): stack = [] for i in s: if i != ')': stack.append(i) continue tmp = [] while stack[-1] != '(': tmp.append(stack.pop()) stack.pop() if tmp: stack.extend(tmp) return ''.join(stack)