返回
LeetCode之有效的括号
后端
2023-11-14 02:17:42
LeetCode 之有效的括号
作为一名技术博客创作专家,我今天要分享的是一道经典的 LeetCode 算法题——有效的括号。
我们先来看一下这道题的具体
给定一个只包括 '(',')','{','}','[',']'
的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
例如, "()"
, "()[]{}"
和 "([])"
都是有效的括号。
而 "([)]"
, "(){]"
和 "(){}
都不是有效的括号。
我们可以使用栈数据结构来解决这个问题。栈是一种后进先出的数据结构,这意味着最后添加的元素将首先被移除。
我们从字符串的开头开始遍历字符串,并依次将左括号压入栈中。当我们遇到一个右括号时,我们就将栈顶的左括号弹出,并检查它们是否匹配。
如果栈顶的左括号与当前的右括号匹配,那么我们就继续遍历字符串。否则,我们就返回 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 上一道经典的算法题,也是面试中经常被问到的题目。希望这篇文章能够帮助你更好地理解这道题的解法。