zoukankan      html  css  js  c++  java
  • 1190. 反转每对括号间的子串

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

    给出一个字符串 s(仅含有小写英文字母和括号)。

    请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。

    注意,您的结果中 不应 包含任何括号。

    借助括号匹配思路,每匹配到一对括号,将其反转

    class Solution:
        def reverseParentheses(self, s: str) -> str:
            def reverse(s,l,r):
                while l < r:
                    tmp = s[l]
                    s[l] = s[r]
                    s[r] = tmp
                    l += 1
                    r -= 1
    
            #每遇到一对括号,反转一次
            stack = []
            s = list(s)
            for i in range(len(s)):
                if s[i] == '(':
                    stack.append(i)
                if s[i] == ')':
                    reverse(s,stack.pop()+1,i-1)
    
            res = []
            for c in s:
                if c != "(" and c != ")":
                    res.append(c)
            return "".join(res)
    

    逐层反转

    (a(sd)f)为例,先处理sd,反转后得到下一个右括号前的新子串adsf,匹配到右括号后再进行一次反转

    class Solution:
        def reverseParentheses(self, s: str) -> str:
            stack = []
            subs = ""
            for c in s:
                if c == "(":
                    stack.append(subs)
                    subs = ""
                elif c == ")":
                    subs = stack.pop()+"".join(reversed(subs))
                else:
                    subs += c
            return subs
    
  • 相关阅读:
    算法之冒泡排序
    实现秒杀的几个想法(续)
    乐观锁
    wifi-sdio接口
    解压vmlinuz和解压initrd(initramfs)
    supplicant
    wpa_supplicant测试
    qu
    netlink
    wpa_supplicant安装
  • 原文地址:https://www.cnblogs.com/gongyanzh/p/14811887.html
Copyright © 2011-2022 走看看