python用栈实现括号匹配问题

该博客探讨了如何使用Python的栈数据结构来解决括号匹配问题。作者首先介绍了问题描述,即检查字符串中是否存在正确配对的括号,并分析了解决此问题的思路。文章提到,通过栈的先进后出特性,可以有效判断括号匹配。当遇到左括号时将其压入栈,遇到右括号时检查栈顶的左括号是否匹配。为了提供详细的错误信息,作者还改进了代码以记录未匹配括号的位置和符号。博客中还列举了在实现过程中遇到的几个编程细节问题及其解决方案。
摘要由CSDN通过智能技术生成

问题描述:

给定一个字符串文字,里面可能含有"()","[]","{}"三种
括号,判断字符串中的括号是否都成对出现
***

思路分析:

如果括号正确匹配,肯定满足:
1、一对正确匹配的括号,一定先出现左括号,再出现右括号
2、三种括号不会出现交叉现象。如“{【】{}()()}”,而不会出现类似“(【)】”的情况。

如果以人类思维方式取匹配,过程如下:
遇到左括号先暂时不管,遇到右括号再看前面出现的左括号是否匹配。(而且由于括号不会交叉,遇到右括号后,查找的一定是距离最近的一个左括号)

最前面(最先)出现的左括号最后比较,最近出现的左括号先比较。因此,我们可以考虑利用栈“先进后出”的特性。

当遇到一个左括号,让它入栈;遇到一个右括号,则比较栈顶元素是否与之匹配。

首先创建一个Stack类

class Stack:
    def __init__(self):
        self.__list = []  # 初始化列表,存储栈中元素。因为不需要外界访问,所以私有化。

    def push(self, item):  # 弹出栈顶元素
        self.__list.append(item)

    def peek(self):
        return self.__list[len(self.__list) - 1]

    def pop(self):
        return self.__list.pop()   # 列表的pop方法,默认返回最后一个元素 

    def is_empty(self):   # 判断是否栈空
        return self.__list == []

遇到右括号,如何表示栈顶元素与括号“匹配”呢?*
一种思路是用字典键值对先存储对应的匹配关系

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值