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

基于栈ADT实现Python的balanced_brackets函数:括号匹配求助

解决括号匹配问题:完善你的balanced_brackets函数

看起来你已经选对了核心思路——用栈来处理括号匹配绝对是这类问题的最优解!咱们来补全你的代码,解决那些你可能卡壳的点。

首先,先明确咱们的需求:

  • 只关心(、)、<、>这四种符号,其他字符直接忽略
  • 左括号必须和对应的右括号按顺序匹配,不能交叉或不对应
  • 最终所有左括号都要有对应的右括号,反之亦然

第一步:补全Stack类(如果还没实现的话)

Python标准库没有自带的Stack类,所以咱们需要先实现一个简单的版本,包含必要的push、pop和is_empty方法:

class Stack:
    def __init__(self):
        self.items = []
    
    def push(self, item):
        self.items.append(item)
    
    def pop(self):
        if not self.is_empty():
            return self.items.pop()
        # 如果栈为空时调用pop,返回None标记异常
        return None
    
    def is_empty(self):
        return len(self.items) == 0

第二步:完善balanced_brackets函数

现在基于你已有的代码框架,补全逻辑:

def balanced_brackets(text):
    s = Stack()
    balanced = True
    index = 0
    # 定义括号匹配映射,快速查找对应关系
    bracket_pairs = {')': '(', '>': '<'}
    
    while index < len(text) and balanced:
        symbol = text[index]
        # 遇到左括号,压入栈
        if symbol in "(<":
            s.push(symbol)
        # 遇到右括号,检查匹配情况
        elif symbol in ")>":
            # 栈为空说明没有对应左括号,直接不匹配
            if s.is_empty():
                balanced = False
            else:
                top = s.pop()
                # 检查弹出的左括号是否和当前右括号匹配
                if top != bracket_pairs[symbol]:
                    balanced = False
        # 其他字符直接忽略,无需处理
        index += 1
    
    # 循环结束后必须检查栈是否为空(避免有未闭合的左括号)
    return balanced and s.is_empty()

代码关键点解释

  • 括号映射字典:用bracket_pairs存储右括号到左括号的对应关系,比多个if判断更简洁高效
  • 右括号处理逻辑:遇到右括号时先判断栈是否为空(空栈意味着没有对应左括号),再弹出栈顶元素检查匹配性
  • 最终栈检查:循环结束后必须确认栈为空——如果还有剩余元素,说明存在未闭合的左括号,依然不匹配

测试用例验证

你可以用这些例子测试函数是否正常工作:

  • balanced_brackets("((<>))") → 返回True(完全匹配)
  • balanced_brackets("(()>") → 返回False(括号类型不匹配)
  • balanced_brackets("a(b<c>d)e") → 返回True(忽略其他字符,括号匹配)
  • balanced_brackets(")<") → 返回False(右括号在前,无对应左括号)
  • balanced_brackets("(<") → 返回False(有未闭合的左括号)

内容的提问来源于stack exchange,提问作者hpotter054

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:15:01