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

一. 题目
  1. 题目
    在这里插入图片描述

  2. 示例
    在这里插入图片描述

二. 方法一: 栈
  1. 解题思路

    1. 遍历字符串, 将"("的下标存放到栈中
    2. 如果遍历到")", 则将栈顶元素和当前下标之间的元素进行反转
    3. 然后再将字符串中的"(“和”)"删除掉即可
  2. 解题代码

    def reverseParentheses(self, s: str) -> str:
        arr = list(s)
        stack = []
        res = ""
        for i in range(len(s)):
            if s[i] == "(":
                stack.append(i)
            elif s[i] == ")":
                arr[stack[-1] + 1: i] = arr[i - 1:stack[-1]: -1]
                stack.pop()
        for ele in arr:
            if ele != "(" and ele != ")":
                res += ele    
        return res
    
  3. 分析
    时间复杂度: O(n^2)
    空间复杂度: O(n)

三. 方法二: 虫洞法(题解中看见)
  1. 解题思路

    1. 遍历字符串, 将左右括号进行匹配
    2. 然后重新遍历字符串, 当遇到"(“或”)"时, 直接跳转到右括号, 并改变指针的遍历方向
    3. 原题解
  2. 解题代码

    def reverseParentheses(self, s: str) -> str:
        stack, arr = [], [-1] * len(s)
        flag, size, index = 1, 0, 0
        res = ""
        # 遍历字符串, 将左右括号进行匹配
        # 数组中存放匹配的下标值
        for i in range(len(s)):
            if s[i] == "(":
                stack.append(i)
            elif s[i] == ")":
                arr[i] = stack[-1]
                arr[stack[-1]] = i
                stack.pop()
        # 当遍历次数达到字符串的长度时, 说明整个字符串都被遍历了
        while size < len(s):
        	# 如果遇到"("或")", 则改变指针移动的方向
            if s[index] == "(" or s[index] == ")":
                flag = - flag
                # 这里如果不加上flag会导致在匹配的括号间反复横跳
                index = arr[index] + flag
            else:
            	# 按照遍历顺序将字母添加到字符串中
                res += s[index]
                index += flag
            size += 1
        return res
    
  3. 分析
    时间复杂度: O(n)
    空间复杂度: O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于广大的WordPress博主来说,WordPress插件当然是越简单越好了,所以,为了满足博主们的需求,不少WordPress插件一直在努力的简化、简单,今天介绍的AdSense Now!插件就是其中的一个,前面介绍过几款广告插件,操作起来有点小复杂,和前几款插件相比,这款插件是比较简单的了。 AdSense Now!插件安装: 1.下载TAdSense Now!插件,将压缩包解压后,把文件夹上传到wp-content/plugins/目录下,登录WordPress管理后台,点击“Plugins”找到上传的插件,激活该插件。 2.插件激活后,在后台的左侧栏中“Settings”--->“AdSense Now!”,点击链接,出现如下图页面: 如图中所示,广告代码有三种显示方式,分别是: Top(顶部):Align Left(左对齐),Center(居中),Align Right(右对齐),Suppress(不显示) Middle(中):Align Left(左对齐),Center(居中),Align Right(右对齐),Suppress(不显示) Bottom(底部):Align Left(左对齐),Center(居中),Align Right(右对齐),Suppress(不显示) 如果你不想再某些页面显示广告,那么,你可以在“Suppress AdSense Ad Blocks on”中选择,不需要显示广告的页面,它们分别是: Attachment Page(附件页),Home Page(首页),Front Page(头版) Category Pages(分类页),Tag Pages(Tag页),Archive Pages(归档页) 这个插件就是这么简单,别看上面介绍那么多,看图的话,一目了然,所有,需要在博客中添加广告的朋友,就可以试试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值