返回
LeetCode有效括号,为何我的代码报错了?原来这里面有坑!
见解分享
2024-01-30 08:45:25
是否曾对LeetCode上看似简单的「有效的括号」问题感到疑惑,却发现自己的代码始终报着让你一头雾水的错误?不用担心,你并不孤单!在这个代码迷宫中,许多程序员都曾陷入过同样的困境。让我们揭开这道题目的幕后黑手,探索隐藏的陷阱和解决它们的巧妙方法。
1. 问题的本质
LeetCode「有效的括号」问题要求我们判断一个只包含括号字符('
, ')'
, {
, }'
, [``,
]`的字符串是否有效。有效意味着括号成对出现,且成对的括号类型匹配,并且左括号必须先于对应的右括号。
2. 常见的陷阱
编写「有效的括号」代码时,最常见的陷阱包括:
- 括号顺序不匹配: 例如,序列
'(]'
是不合法的,因为右括号']'
出現在左括号'('
之前。 - 括号类型不匹配: 例如,序列
'{]'
是不合法的,因为右括号']'
与左括号'{'
类型不匹配。 - 左括号多于右括号,或反之: 例如,序列
'((['
是不合法的,因为左括号比右括号多。
3. 解决方法:巧用栈
解决「有效的括号」问题的关键在于使用栈数据结构。栈是一种遵循后进先出(LIFO)原则的线性数据结构。我们可以将左括号压入栈中,当遇到右括号时,检查栈顶元素是否为与该右括号匹配的左括号。如果是,则弹出栈顶元素,表示一对括号匹配成功;否则,字符串无效。
例如,对于字符串'()[]{}'
,我们可以按如下步骤操作:
- 左括号
'('
入栈。 - 右括号
')'
与栈顶左括号'('
匹配,弹出栈顶元素。 - 左括号
'['
入栈。 - 右括号
']'
与栈顶左括号'['
匹配,弹出栈顶元素。 - 左括号
'{'
入栈。 - 右括号
'}'
与栈顶左括号'{'
匹配,弹出栈顶元素。 - 栈为空,说明所有括号都成对匹配,字符串有效。
4. 代码实现
def is_valid(s: str) -> bool:
"""
判断一个只包含括号字符的字符串是否有效。
Args:
s (str): 只包含括号字符的字符串。
Returns:
bool: 如果字符串有效,返回 True;否则,返回 False。
"""
stack = []
bracket_pairs = {')': '(', '}': '{', ']': '['}
for char in s:
if char in bracket_pairs.values():
stack.append(char)
elif char in bracket_pairs.keys():
if not stack or stack.pop() != bracket_pairs[char]:
return False
else:
return False
return not stack
5. 总结
通过巧妙地使用栈数据结构,我们可以有效解决LeetCode「有效的括号」问题。通过避免常见的陷阱并遵循正确的策略,我们可以自信地编写出能够处理各种括号组合的代码。下次你在LeetCode上遇到这个问题时,记住这些技巧,你就能轻松攻克它!