返回
LeetCode 20 - 有效括号的判断
后端
2023-11-20 12:06:06
如何确定给定的括号字符串是否有效?
前言
LeetCode 20 是一个经典的算法问题,要求我们判断给定的括号字符串是否有效。括号字符串由小括号 ()
, 中括号 []
和大括号 {}
组成,有效括号字符串需要满足以下条件:
- 括号必须成对出现,即每个左括号必须与一个右括号相匹配。
- 左括号必须在右括号之前出现。
- 括号必须按照正确的顺序出现,即
()
、[]
和{}
。
我们可以通过栈数据结构来解决这个问题。栈是一种先进后出的数据结构,我们可以将左括号压入栈中,当遇到右括号时,我们从栈中弹出左括号,并检查两者是否匹配。如果所有括号都匹配,则字符串有效;否则,字符串无效。
代码实现
def is_valid(s):
"""
判断给定的括号字符串是否有效。
Args:
s: 给定的括号字符串。
Returns:
布尔值,表示给定的括号字符串是否有效。
"""
# 创建一个栈来存储左括号。
stack = []
# 遍历给定的字符串。
for char in s:
# 如果遇到左括号,则将其压入栈中。
if char in "([{":
stack.append(char)
# 如果遇到右括号,则从栈中弹出左括号,并检查两者是否匹配。
elif char in ")]}":
if not stack:
return False
left = stack.pop()
if (left == "(" and char != ")") or \
(left == "[" and char != "]") or \
(left == "{" and char != "}"):
return False
# 如果栈中还有左括号,则字符串无效。
if stack:
return False
# 如果所有括号都匹配,则字符串有效。
return True
测试
assert is_valid("()") == True
assert is_valid("[]") == True
assert is_valid("{}") == True
assert is_valid("([{}])") == True
assert is_valid("{[()]") == False
assert is_valid(")") == False
assert is_valid("([)]") == False
复杂度分析
- 时间复杂度:
O(n)
,其中n
是给定字符串的长度。 - 空间复杂度:
O(n)
,其中n
是给定字符串的长度。
总结
LeetCode 20 是一个经典的算法问题,要求我们判断给定的括号字符串是否有效。我们可以通过栈数据结构来解决这个问题,时间复杂度和空间复杂度都是 O(n)
。