返回

解密 LeetCode 第 20 题:有效括号——代码严谨,从基础做起!LeetCode第20题:有效括号——代码严谨,从基础做起!

前端

亲爱的朋友们,欢迎来到 LeetCode 第 20 题的挑战之旅!今天,我们将共同探讨如何判断给定字符串中的括号是否匹配。作为程序员,代码严谨是我们的必备技能,而解决这个问题正是对这一技能的考验。

让我们从基础概念开始。括号有三种类型:圆括号“()”,方括号“[]”和大括号“{}”。这些括号通常用于将代码块分组,或者表示函数的参数和返回值。在有效的括号字符串中,每个左括号都必须有一个对应的右括号,并且这些括号必须按照正确的顺序出现。例如,“()”和“{}”都是有效的括号字符串,而“([)]”和“{(})”则不是。

为了解决这个问题,我们可以使用栈数据结构。栈是一种遵循“后进先出”(LIFO)原则的数据结构,这意味着最后一个放入栈中的元素将是第一个被取出的元素。我们可以将左括号压入栈中,当遇到右括号时,我们将栈顶元素弹出并检查它是否与当前的右括号匹配。如果匹配,则继续处理字符串的其余部分;如果不匹配,则字符串无效。

我们来看看如何将这个算法转化为代码。首先,我们需要创建一个栈来存储左括号。我们可以使用 Python 的列表来实现栈,因为列表支持 append() 和 pop() 操作,正好符合栈的特性。然后,我们需要遍历字符串,并根据遇到的字符类型采取相应的动作。以下是代码实现:

def is_valid(s):
    stack = []
    brackets = {')': '(', '}': '{', ']': '['}
    for char in s:
        if char in brackets.values():
            stack.append(char)
        elif char in brackets.keys():
            if not stack or stack.pop() != brackets[char]:
                return False
    return not stack

这段代码首先创建一个空栈 stack 来存储左括号。然后,它遍历字符串 s,并根据遇到的字符类型采取相应的动作。如果字符是左括号,则将它压入栈中;如果字符是右括号,则将栈顶元素弹出并检查它是否与当前的右括号匹配。如果不匹配,则返回 False,表示字符串无效;如果匹配,则继续处理字符串的其余部分。最后,如果栈为空,则字符串有效,否则无效。

LeetCode 第 20 题:有效括号,看似简单,却蕴含着代码严谨的精髓。通过这道题,我们不仅掌握了一种解决括号匹配问题的算法,更重要的是,我们对栈数据结构有了更深入的理解。希望这篇文章能对您的编程之旅有所帮助,也欢迎您在评论区留下您的想法和见解。