【LeetCode】1021. 删除最外层的括号

156 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。 怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

  • 题目示例

  • 题目解析

    • 1 <= s.length <= 105
    • s[i]'('')'
    • s 是一个有效括号字符串

二、思路分析:

我们阅读本题题意,要求对给出的字符串s进行去掉外围的括号并返回新的结果。

我们来理清一下概念,什么是有效括号无效括号

  • 有效括号:左括号(和右括号)组成。如(),(())这样的。
  • 无效括号:左括号(和右括号)顺序反了,或者缺少其中一个。如)((()())
  • 无括号:空字符。""

题目中提到字符串s是原语的概念是什么意思?

  • 原语:不可拆分的有效括号如(()())
  • 非原语:可拆分的有效括号如()()(())

image.png

我们来理一下,解答该题目,可以使用的思维:

  • 定义一个列表tmp,来负责存储左括号(
  • 遍历字符串s每一个元素
    • s[i] == ")",tmp 将推出s[i]
    • 当 tmp 不为空,则 res = res + s[i]
    • s[i] == "(" ,将s[i] 添加到 tmp 列表

image.png

如图所示,我们根据上述思路实现代码如下:

class Solution(object):

    def removeOuterParentheses(self, s):

        """
        :type s: str
        :rtype: str
        """
        tmp = []
        res = ""

        for i in range(len(s)):
            if s[i] == ")":
                tmp.pop()
            if tmp :
                res = res + s[i]
            if s[i] == "(":
                tmp.append(s[i])
        return res   

三、总结:

本题,考察我们栈,先进后出的思想。当然判断条件的顺序也要注意,AC记录如下:

image.png

  • 时间复杂度O(N),N为字符串长度
  • 空间复杂度O(N),要使用列表来入栈出栈

以上是本期内容,欢迎大佬们点赞评论,下期见~~~