You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:22:27