2021/5/26 刷题笔记反转每对括号间的子串

Posted 黑黑白白君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021/5/26 刷题笔记反转每对括号间的子串相关的知识,希望对你有一定的参考价值。



反转每对括号间的子串

【题目】

给出一个字符串 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”

提示:

  • 0 <= s.length <= 2000
  • s 中只有小写英文字母和括号
  • 我们确保所有括号都是成对出现的

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

【我的方法】

1、本质是找出最内的括号,然后反转完后放入第二内的括号,然后再对第二内的括号反转,以此类推,所以可以看作递归。

2、用一个栈和一个队列,栈用来反转,队列用来存储反转完的子串。

代码:

class Solution:
    def reverseParentheses(self, s: str) -> str:
        stack1=[]  # 栈
        L=[]  # 队列
        s=list(s)
        i=0
        while(i<len(s)):
            if s[i]==')':  # 遇到’)‘说明已经到目前最内的括号了
                x=stack1.pop()
                while(x!='('):
                    L.append(x)  # 队列存放反转完的子串
                    x=stack1.pop()
                stack1.extend(L)  # 反转完的重新放回栈内
                L.clear()
            else:
                stack1.append(s[i])
            i+=1
        res=''.join(stack1)
        return res
# 执行用时:32 ms, 在所有 Python3 提交中击败了96.14%的用户
# 内存消耗:14.8 MB, 在所有 Python3 提交中击败了80.97%的用户
  • 复杂度分析

    • 时间复杂度:栈的最大深度O(n),队列的最大深度O(n),所以总的时间复杂度O(n^2)。
    • 空间复杂度:栈和队列的最大深度可知,空间复杂度为O(n)。

以上是关于2021/5/26 刷题笔记反转每对括号间的子串的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

反转每对括号间的子串

leetcode中等1190反转每对括号间的子串

力扣leetcode1190. 反转每对括号间的子串