返回
解码LeetCode第20题:围栏括号的有效性
前端
2023-09-28 10:03:36
让我们踏上LeetCode系列之旅的第一步,一起征服第20题:有效的括号。这道题考察了我们处理字符串和识别括号有效性的能力。让我们深入解析题目,了解题目的本质:
给定一个只包含 (、)、{、}、[、] 的字符串,判断字符串中的括号是否有效配对。
为了更好地理解有效括号的含义,让我们用几个例子来帮助你:
- "()"、"{}"、"[]" 都是有效的括号,因为其中的括号都成对出现且匹配。
- "(]"、"{[]}"、"([)]" 都不是有效的括号,因为括号不匹配或者顺序不对。
- "(){}"、"([])" 都是有效的括号,因为括号成对出现且顺序正确。
现在,我们已经对有效括号有了基本认识,接下来让我们探索解决这个问题的算法原理:
栈数据结构
栈是一种遵循后进先出(LIFO)原则的数据结构,这意味着最后进入栈中的元素将第一个出来。我们可以利用栈来解决这个问题,具体步骤如下:
- 创建一个空栈。
- 从左到右遍历字符串中的每个字符。
- 如果当前字符是左括号((、{、[),将其压入栈中。
- 如果当前字符是右括号()、}、]),检查栈顶元素是否与当前字符匹配。如果是,则弹出栈顶元素;如果不是,则当前字符串不是有效括号。
- 重复步骤 3 和 4,直到遍历完整个字符串。
- 如果栈为空,则字符串中的括号是有效的;否则,字符串中的括号不是有效的。
现在,让我们用代码示例来具体演示算法的实现:
def is_valid(s):
"""
判断字符串中的括号是否有效配对。
参数:
s: 输入字符串,只包含 (、)、{、}、[、]。
返回值:
布尔值,表示字符串中的括号是否有效配对。
"""
# 创建一个空栈
stack = []
# 从左到右遍历字符串中的每个字符
for char in s:
# 如果当前字符是左括号,将其压入栈中
if char in "([{":
stack.append(char)
# 如果当前字符是右括号,检查栈顶元素是否与当前字符匹配
elif char in ")]}":
# 如果栈顶元素与当前字符匹配,则弹出栈顶元素
if stack and stack[-1] == "([{".find(char):
stack.pop()
# 如果栈顶元素与当前字符不匹配,则当前字符串不是有效括号
else:
return False
# 如果栈为空,则字符串中的括号是有效的;否则,字符串中的括号不是有效的
return not stack
通过这篇博客文章,我们共同探索了LeetCode系列的第一题:有效的括号。我们从题目的理解入手,深入剖析了有效括号的含义,并详细讲解了解决问题的算法原理和代码实现。希望你能从中有所收获,并对LeetCode系列后续的题目充满期待。如果你有任何问题或建议,欢迎在评论区留言,我会尽力解答和改进。让我们一起携手,在LeetCode的挑战中不断进步,一起解码编程的奥秘!