栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python实现三种括号的匹配

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python实现三种括号的匹配

如上一篇文章,我们可以通过栈的数据结构实现小括号的匹配,那么只需要稍微修改一下,就可以实现三种括号(){}【】的匹配了。

在这里我想应该重申一下括号匹配的定义,每一个左括号都要有相应的右括号而且有合理的嵌套关系,换句话说,第一个左括号一定和最后一个右括号匹配,最后一个无匹配的左括号一定和遇到的第一个右括号相匹配,所以,{(})这样的字符串显然是不匹配的。

首先,我们需要定义栈的数据结构,不做多叙。

其次,我们要考虑算法部分,在这里,我们输入的字符串并非只有左右的区别,它是有三种不同的括号,类似于上一篇,我们可以依旧将左值压进栈s中,然后定义一个计数器i和一个布尔型变量balanced(上一篇文章已经详细叙述了为什么我们需要它,因为右边的括号太多有可能导致左边是空栈!)然后,只要这个balanced为真,并且所有的左括号都找到了对应 的右括号(栈空),则字符串一定匹配。

下面我们需要处理的最麻烦的部分就是对栈的弹出的处理,不妨思考一下,给下面的输入示例:
”{()}“,此时我们的栈中是什么样子的。

{

我们的栈就是上面的表格,如果要弹出,首先弹出的应该是圆括号,也就是说如果下一个读入的字符是右括号,那么它一定是小括号,否则整个字符串一定是不匹配的。

因此,在这里我们多了一个挑战,就是需要有一个匹配函数来断定这栈顶的括号和读取到的括号能不能匹配,如果不能,则直接把balanced改为False。

最后的输出值判断和上一篇一样,不做过多的叙述。

最后来考虑匹配函数,首先,我们可以使用index()来返回两个符号对应的索引值,如果索引值相同,则说明括号是匹配的,同样,我们也可以用循环的遍历来实现matches(),只是复杂度高一些。在这里使用循环代码,因为我当时忘记了index.

class Stack:
    def __init__(self):
        self.items = []
    def isEmpty(self):
        return self.items==[]
    def push(self,item):
        self.items.append(item)
    def pop(self):
        return self.items.pop()
    def peek(self):
        return self.items[len(self.items)-1]
    def size(self):
        return len(self.items)
def parchecker(symbolString):
    s = Stack()
    balanced = True
    i=0
    while i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530031.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号