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%的用户
以上是关于2021/5/26 刷题笔记反转每对括号间的子串的主要内容,如果未能解决你的问题,请参考以下文章