美文网首页清风Python力扣算法刷题
力扣每日一题:1190.反转每对括号间的子串 很容易理解的栈操作

力扣每日一题:1190.反转每对括号间的子串 很容易理解的栈操作

作者: 清风Python | 来源:发表于2021-05-26 23:41 被阅读0次

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)

欢迎关注我的公众号: 清风Python,带你每日学习Python算法刷题的同时,了解更多python小知识。

我的个人博客:https://qingfengpython.cn

力扣解题合集:https://github.com/BreezePython/AlgorithmMarkdown

相关文章

网友评论

    本文标题:力扣每日一题:1190.反转每对括号间的子串 很容易理解的栈操作

    本文链接:https://www.haomeiwen.com/subject/fnalsltx.html