返回
从理解题意到实现算法——LeetCode20题解析
后端
2023-09-15 08:43:37
正文
理解题意
LeetCode的第20道题“有效的括号”是一道经典的算法题,考察的是对数据结构——栈的理解和运用。题目要求判断给定字符串中括号是否有效。有效括号是指:
- 每个左括号必须对应一个右括号。
- 左括号和右括号必须一一对应,不能出现嵌套。
- 括号必须成对出现,不能出现单独的左括号或右括号。
例如,以下字符串中的括号是有效的:
()
[]
{}
以下字符串中的括号是无效的:
([)]
{[]}
(()
选择数据结构
解决这道题的关键是选择合适的数据结构。栈是一种先进后出的数据结构,非常适合用来判断括号是否有效。栈的原理很简单:后进先出,就像一摞盘子一样。当我们把一个左括号压入栈中,就相当于把一个盘子放在摞盘子的最上面。当我们遇到一个右括号时,就相当于把摞盘子最上面的盘子取出来。如果取出来的盘子与压进去的左括号不匹配,那么括号就是无效的。
代码实现
下面是使用Python实现的代码:
def is_valid(s):
"""
判断给定字符串中的括号是否有效。
Args:
s: 给定字符串。
Returns:
True if the括号 are valid, False otherwise.
"""
# 创建一个栈来存储左括号。
stack = []
# 遍历给定字符串。
for char in s:
# 如果是左括号,则压入栈中。
if char in "([{":
stack.append(char)
# 如果是右括号,则检查栈顶元素是否与之匹配。
elif char in ")]}":
if not stack:
return False
top = stack.pop()
if top == "(" and char != ")":
return False
elif top == "[" and char != "]":
return False
elif top == "{" and char != "}":
return False
# 如果栈不为空,则括号无效。
if stack:
return False
# 否则,括号有效。
return True
# 测试代码。
print(is_valid("()")) # True
print(is_valid("[]")) # True
print(is_valid("{}")) # True
print(is_valid("([)]")) # False
print(is_valid("{[]}")) # False
print(is_valid("(()")) # False
总结
LeetCode的第20道题“有效的括号”是一道经典的算法题,考察的是对数据结构——栈的理解和运用。通过这道题,我们可以学习到如何使用栈来解决实际问题。同时,这道题也是算法新手入门的一块很好的试金石。