1.1.1 栈的应用【括号匹配检查】

本文介绍了一个使用栈数据结构解决括号匹配问题的Python函数parchecker。它检查给定的符号序列中左括号与右括号是否正确配对。通过遍历并利用栈操作,确保括号序列的完整性。
摘要由CSDN通过智能技术生成

思路:{{}[()()][]}

扫描整个括号序列:

1、遇到左括号(无论是哪种),入栈

2、遇到右括号,则需要进行判断:

(1)栈是否为空。为空,则返回缺少对应的左括号;

(2)如果非空,则弹出左括号

(3)对弹出的左括号进行检查,看是否与右括号匹配,这里是个小技巧,代码如下:

def matched(open,close):
    opens = '([{'
    closes = ')]}'
    return opens.index(open) == closes.index(close)

(4)如果匹配,则继续扫描

3、扫描结束,检查栈内是否还有左括号,如果有,则是缺少右括号。

完整代码如下:

# 导入自定义stack模块
import stack

# 创建一个栈对象symbol_stack
symbol_stack = stack.Stack()

# 定义函数parchecker,输入参数为symbols(待检查的符号序列),left_pattern(左括号模式),right_pattern(右括号模式)
def parchecker(symbols, left_pattern, right_pattern):
    # 遍历符号序列symbols
    for symbol in symbols:
        # 如果当前符号属于左括号模式,则压入栈
        if symbol in left_pattern:
            symbol_stack.push(symbol)
        # 否则,若栈为空,直接返回缺失的对应左括号
        else:
            if symbol_stack.isEmpty():
                return f'{left_pattern[right_pattern.index(symbol)]} missed!'
            # 否则弹出栈顶元素进行匹配
            else:
                top = symbol_stack.pop()
                # 若栈顶元素与当前符号不匹配,则返回“not match!”
                if not matched(top, symbol):
                    return f'not match!'

    # 遍历结束后,若栈为空,说明所有括号都已成功匹配
    if symbol_stack.isEmpty():
        return f'{symbols}, perfectly matched!'
    # 否则,存在未匹配的左括号,返回“not match!”
    else:
        return f'{symbols} not match!'

# 定义辅助函数matched,判断一对括号是否匹配
def matched(open, close):
    opens = '([{'
    closes = ')]}'
    # 根据左右括号在各自字符串中的索引是否相等判断是否匹配
    return opens.index(open) == closes.index(close)

# 主程序入口,调用parchecker函数并打印结果
if __name__ == '__main__':
    print(parchecker('{}}}', '([{', ')]}'))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值