如何在collections.deque栈中获取栈顶元素?LeetCode有效括号问题咨询
用collections.deque解决LeetCode有效括号问题
collections.deque本身支持用[-1]索引直接获取栈顶元素,和列表的用法完全一致,不需要额外的peek方法。下面是修正后的完整代码,同时解决你提到的语法和逻辑问题:
修正后的代码实现
from collections import deque def isValid(s: str) -> bool: stack = deque() # 用字典存储括号匹配关系,简化条件判断 bracket_pair = {')': '(', '}': '{', ']': '['} for char in s: # 处理右括号:检查栈顶是否匹配 if char in bracket_pair: # 栈非空时弹出栈顶,空栈则用占位符避免索引错误 top_char = stack.pop() if stack else '#' if bracket_pair[char] != top_char: return False else: # 左括号直接入栈 stack.append(char) # 所有括号匹配完成后,栈为空才有效 return not stack
关键问题说明
- 栈顶元素获取:deque支持
stack[-1]直接访问栈顶,但要注意空栈时会触发索引错误。上面代码里用stack.pop() if stack else '#'的方式,既完成了匹配后的弹出操作,又处理了空栈的异常场景。 - 关于
maxlen:deque的maxlen是属性而非方法,它用于限制队列的最大容量,和判断栈是否为空无关。判断栈空直接用if not stack或len(stack) == 0即可。 - 简化判断逻辑:用字典映射右括号到对应左括号,相比多个
if-elif分支更简洁易维护。
测试场景验证
- 输入
"{[()]}":左括号依次入栈,右括号逐个匹配弹出,最终栈为空,返回True。 - 输入
"{[)]}":遇到)时弹出栈顶的[,与(不匹配,直接返回False。
内容的提问来源于stack exchange,提问作者Prathamesh Padhye
相关产品推荐
相关产品推荐

