返回

LeetCode之有效的括号

后端

LeetCode 之有效的括号

作为一名技术博客创作专家,我今天要分享的是一道经典的 LeetCode 算法题——有效的括号。

我们先来看一下这道题的具体

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

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

例如, "()", "()[]{}""([])" 都是有效的括号。
"([)]", "(){]""(){} 都不是有效的括号。

我们可以使用栈数据结构来解决这个问题。栈是一种后进先出的数据结构,这意味着最后添加的元素将首先被移除。

我们从字符串的开头开始遍历字符串,并依次将左括号压入栈中。当我们遇到一个右括号时,我们就将栈顶的左括号弹出,并检查它们是否匹配。

如果栈顶的左括号与当前的右括号匹配,那么我们就继续遍历字符串。否则,我们就返回 false,表明字符串无效。

以下是使用栈数据结构解决这道题的代码示例:

def is_valid(s):
    stack = []
    left_brackets = ['(', '[', '{']
    right_brackets = [')', ']', '}']
    bracket_map = dict(zip(left_brackets, right_brackets))

    for char in s:
        if char in left_brackets:
            stack.append(char)
        elif char in right_brackets:
            if not stack:
                return False
            top_bracket = stack.pop()
            if bracket_map[top_bracket] != char:
                return False
    return not stack

# 测试用例
assert is_valid("()") == True
assert is_valid("()[]{}") == True
assert is_valid("([])") == True
assert is_valid("([)]") == False
assert is_valid("(){]") == False
assert is_valid("(){}") == False

这道题是 LeetCode 上一道经典的算法题,也是面试中经常被问到的题目。希望这篇文章能够帮助你更好地理解这道题的解法。