返回

揭秘 LeetCode 20:有效括号的奥秘

前端

import aistore

# 定义文章标题


# 定义 SEO 关键词


# 定义文章


## 引言

在编程世界中,有效地处理括号至关重要。LeetCode 第 20 题——有效括号,考察了我们判断括号序列是否有效的技能。本篇文章将带领你深入理解这道经典算法题,并提供清晰易懂的代码实现。

## 问题

给定一个仅包含以下字符的字符串 `s`:

'(',')'
'{','}'
'[',']'


判断字符串 `s` 是否有效。有效字符串需满足以下条件:

* 左括号必须用相同类型的右括号闭合。
* 左括号必须以正确的顺序闭合。

## 算法思路

解决这道题的关键在于使用栈数据结构。栈是一种遵循后进先出(LIFO)原则的线性数据结构。

算法步骤如下:

1. 创建一个空栈。
2. 遍历字符串 `s` 中的每个字符:
   - 如果字符是左括号,将其压入栈中。
   - 如果字符是右括号:
     - 如果栈为空,则字符串无效。
     - 如果栈顶元素与右括号不匹配,则字符串无效。
     - 否则,将栈顶元素弹出。
3. 如果遍历完成后栈为空,则字符串有效;否则,字符串无效。

## 代码实现

以下是用 Python 实现的代码:

```python
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
        else:
            return False
    
    return not stack

具体示例

示例 1:

输入:s = "()"
输出:True
解释:() 是有效的括号序列。

示例 2:

输入:s = "()[]{}"
输出:True
解释:()[]{} 是有效的括号序列。

示例 3:

输入:s = "(]"
输出:False
解释:()] 是无效的括号序列,因为右括号没有与匹配的左括号。

总结

通过利用栈数据结构,我们可以有效地判断括号序列的有效性。LeetCode 第 20 题——有效括号,不仅考验了我们的算法思维,也让我们理解了栈在实际问题中的应用。掌握这道题的解法,将为你解决更多与括号相关的算法问题打下坚实的基础。