返回

LeetCode 1021:删除最外层的括号:一道简单且有趣的小题

前端

引言

在软件开发的领域,字符串一直是一个不可或缺的重要组成部分。它们可以表示各种各样的信息,从简单的文本到复杂的代码。因此,处理字符串的能力对于程序员来说是必不可少的。LeetCode 1021 题:删除最外层的括号,正是这样一个与字符串相关的经典问题。

本题要求我们从一个包含括号的字符串中,删除最外层的括号。换句话说,就是找到并去除字符串中多余的括号,使其成为一个有效的括号字符串。

了解题目

在解决问题之前,首先需要对题目有一个清晰的理解。以下是本题的正式表述:

题目:1021. 删除最外层的括号

给定一个由 '(' 和 ')' 括号组成的字符串 s,删除最外层的括号并返回剩余的字符串。

示例 1:

输入:s = "(()())(())"
输出:"()()()"
解释:
最外层的括号为 (()) 和 (()),因此将它们删除后得到 ()()()

示例 2:

输入:s = ")(()))))"
输出:""
解释:
最外层的括号为 () 和 ))))),因此将它们删除后得到空字符串。

解决问题

现在我们已经对题目有了基本的了解,接下来就可以开始寻找解决问题的方案了。

栈的应用

解决本题的一个常见方法是使用栈数据结构。栈是一种后进先出(LIFO)的数据结构,它允许我们在常数时间内在栈顶添加或删除元素。

我们可以将字符串 s 中的每个字符依次压入栈中。每当遇到一个右括号时,我们检查栈顶元素是否为左括号。如果是,则弹出这两个元素。否则,我们继续压入右括号。

当我们遍历完整个字符串后,栈中剩下的元素就是有效括号字符串。我们将这些元素连接起来,并将其作为答案返回。

代码实现

以下是使用栈解决本题的代码实现(Python):

def remove_outer_parentheses(s):
  """
  删除最外层的括号。

  参数:
    s:一个包含括号的字符串。

  返回:
    一个有效的括号字符串。
  """

  stack = []
  result = []

  for char in s:
    if char == '(':
      if stack:
        result.append('(')
      stack.append(char)
    else:
      if stack.pop() == '(':
        result.append(')')

  return ''.join(result)

延伸问题

除了解决本题之外,我们还可以思考一些与本题相关的延伸问题,以进一步加深对字符串处理的理解。

1. 嵌套括号的删除

本题要求我们删除最外层的括号,但如果括号是嵌套的呢?例如,给定字符串 "(((())))",我们需要删除最内层和最外层的括号,得到 "()()()”。

我们可以使用递归的方法来解决这个问题。首先,我们找到最内层的括号并将其删除。然后,我们将剩余的字符串作为新的输入,重复该过程,直到所有嵌套的括号都被删除。

2. 其他括号类型

除了圆括号之外,还有其他类型的括号,如方括号和花括号。我们可以将本题的思路扩展到其他类型的括号上,并编写一个通用函数来处理各种类型的括号。

总结

LeetCode 1021 题:删除最外层的括号,是一个简单且有趣的小题。它考察了我们对栈数据结构的理解以及字符串处理的能力。通过解决本题,我们不仅可以巩固基础知识,还可以激发我们的思考,探索更多与字符串相关的有趣问题。