返回

程序猿必会:LeetCode 1021题解析——快来一起做题!

前端

大家好,我是挨打的阿木木,爱好算法的前端摸鱼老。最近会频繁给大家分享我刷算法题过程中的思路和心得。如果你也是想提高逼格的摸鱼老,欢迎关注我,一起学习。

今天我们要一起解决的是LeetCode 1021题:删除最外层的括号。

题目

给定一个由有效括号字符组成的字符串s,删除最外层的括号并返回结果字符串。

示例 1:

输入:s = "(()())"
输出:"()()"
解释:
最外层的括号为"()",所以结果为"()()"

示例 2:

输入:s = "(())(())"
输出:"()()()"
解释:
最外层的括号为"()""()",所以结果为"()()()"

示例 3:

输入:s = "(()())(())"
输出:"()()()()"
解释:
最外层的括号为"()""()""()",所以结果为"()()()()"

示例 4:

输入:s = "((()(())))"
输出:"()()"
解释:
最外层的括号为"()""()",所以结果为"()()"

示例 5:

输入:s = "(()(((()))))"
输出:"()()"
解释:
最外层的括号为"()""()",所以结果为"()()"

解题思路

这道题的解题思路非常简单,我们可以使用栈来解决。

首先,我们将字符串s从左到右遍历一遍,并将每个括号压入栈中。

当我们遇到一个左括号'('时,我们直接将其压入栈中。

当我们遇到一个右括号')'时,我们检查栈顶元素是否是左括号'('。如果是,则我们将栈顶元素出栈。如果不是,则说明我们遇到了最外层的右括号,我们将其保存在一个字符串中。

当我们遍历完整个字符串后,我们将栈中剩余的元素依次弹出,并将其保存在同一个字符串中。

最后,我们返回这个字符串,即为删除最外层的括号后的结果。

代码实现

def remove_outer_parentheses(s):
    """
    删除最外层的括号
    :param s: 给定的字符串
    :return: 删除最外层的括号后的字符串
    """
    stack = []
    result = ""
    for char in s:
        if char == '(':
            stack.append(char)
        else:
            if stack:
                stack.pop()
            else:
                result += char
    return result


if __name__ == '__main__':
    s = "(()())"
    print(remove_outer_parentheses(s))  # "()()"

    s = "(())(())"
    print(remove_outer_parentheses(s))  # "()()()"

    s = "(()())(())"
    print(remove_outer_parentheses(s))  # "()()()()"

    s = "((()(())))"
    print(remove_outer_parentheses(s))  # "()()"

    s = "(()(((()))))"
    print(remove_outer_parentheses(s))  # "()()"

总结

这道题的解题思路非常简单,我们可以使用栈来解决。

如果你对LeetCode算法题感兴趣,欢迎关注我,我会继续分享我刷算法题过程中的思路和心得。