栈的应用--括号匹配(python篇)

这篇具有很好参考价值的文章主要介绍了栈的应用--括号匹配(python篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇文章将使用python实现栈的应用之括号匹配

首先,明确需求,需求是:

1,通过控制台输入一串字符串,判断是否全为括号;

2,将括号分为左括号和右括号;

3,创建一个栈,将左括号入栈,同时从字符串中取出右括号,进行匹配,若匹配成功,则该左括号出栈,否则右括号入新栈;

4,当字符串匹配完成时,对两个栈的长度进行匹配,若长度相等且为零,则表示匹配成功,若长度相等且不为零,则对栈内元素进行匹配,若重新匹配使得双栈长度为零,则表示匹配成功,否则失败

其次,对于括号匹配问题,我们需要创建一个字典以便于进行匹配,示例如下:

match_dict={")":"(","]":"[","}":"{"}

 因此,当进行括号匹配时,我们可以使用for循环遍历输入字符串,并使用如下代码段进行匹配判断

get_=stack.pop_()#从定义好的栈中获取已经入栈的左括号
for i in {")","]","}"}:
    if match_dict[i] == get_ :
        stack.pop()#匹配成功,将该左括号出栈

根据括号匹配的需求,栈的设计需要包含:定义,长度获取,压栈,获取栈顶元素,弹栈

栈的设计完整代码如下:

class Stack:
    def __init__(self):
        self.items=[]

    def pop_(self):
        return self.items[-1]


    def pop(self):
        return self.items.pop()


    def get_length(self):
        return len(self.items)


    def push(self,elem):
        return self.items.append(elem)

根据括号匹配的需求,设计匹配函数如下:

def Match_blankets(string):
#实例化两个栈以备用
    stack=Stack()
    stack2=Stack()
#创建匹配字典,便于匹配
    match_dict={")":"(","]":"[","}":"{"}
#遍历括号字符串,匹配开始
    for i in string:
#左括号压栈
        if i in {"(","[","{"}:
            stack.push(i)
#判断右括号是否与左括号栈顶元素匹配,匹配则弹出左括号栈顶元素,不匹配则压入新栈
        elif i in {")","]","}"}:
            get_=stack.pop_()
            if get_ == match_dict[i]:
                stack.pop()
            else:
                stack2.push(i)
        else:
            print("括号不纯!")
            return -1
#判断第一轮匹配是否完全,不完全则进入下一步匹配
    if stack.get_length() != stack2.get_length():
        print("匹配失败!")
        return -1
    else:
#进入下一步匹配,重复遍历其中一个栈内的元素,直到其中一个栈空或者遍历完成
        for i in stack2.items:
            get_new = stack.pop_()
            if get_new == match_dict[i]:
                stack.pop()
                stack2.pop()
#最后进行一次判断,若匹配完全,则双栈长度均为零
        if stack.get_length() == 0 and stack2.get_length() == 0:
            print("匹配成功!")
            return 0

最后,完整代码如下:

class Stack:
    def __init__(self):
        self.items=[]

    def pop_(self):
        return self.items[-1]


    def pop(self):
        return self.items.pop()


    def get_length(self):
        return len(self.items)


    def push(self,elem):
        return self.items.append(elem)


def Match_blankets(string):
    stack=Stack()
    stack2=Stack()
    match_dict={")":"(","]":"[","}":"{"}
    for i in string:
        if i in {"(","[","{"}:
            stack.push(i)
        elif i in {")","]","}"}:
            get_=stack.pop_()
            if get_ == match_dict[i]:
                stack.pop()
            else:
                stack2.push(i)
        else:
            print("括号不纯!")
            return -1
    if stack.get_length() != stack2.get_length():
        print("匹配失败!")
        return -1
    else:
        for i in stack2.items:
            get_new = stack.pop_()
            if get_new == match_dict[i]:
                stack.pop()
                stack2.pop()
        if stack.get_length() == 0 and stack2.get_length() == 0:
            print("匹配成功!")
            return 0



if __name__=="__main__":
    string=input("请输入括号!")
    Match_blankets(string)

 文章来源地址https://www.toymoban.com/news/detail-413701.html

 

 

到了这里,关于栈的应用--括号匹配(python篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【无标题】华为OD机试 - 表达式括号匹配(Java & JS & Python & C & C++)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 (1+(2+3)*(3+(8+0))+1-2)这是一个简单的数学表达式,今天不是计算它的值,而是比较它的括号匹配是否正确。 前面这个式子可以简化为(()(()))这样的括号我们认为它是匹配正确的, 而((()

    2024年04月09日
    浏览(70)
  • Java括号匹配

    目录 一、题目描述 二、题解 给定一个只包括  \\\'(\\\' , \\\')\\\' , \\\'{\\\' , \\\'}\\\' , \\\'[\\\' , \\\']\\\'  的字符串  s  ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 示例: 输

    2024年02月07日
    浏览(29)
  • 解决括号相关匹配问题

    题目 思路 题目中涉及三种类型的括号,可以利用栈 先进后出 的特性,记录当前最近的左括号;当遇到右括号是判断栈顶的左扩号是否是对应的类型,若不能匹配直接返回fasle。若字符串遍历完毕且栈中所有左括号均得到匹配,则返回true. 代码 题目 思路 遍历整个字符串,使

    2024年02月07日
    浏览(25)
  • 【数据结构】用栈实现括号匹配

    1.创立一个判断括号是否匹配的函数BracketsCheck 2.传参(栈,输入的字符串) 3.对字符串中的(、[、{、这三种括号进行匹配 4.顺序从左往右进行,依次将符合条件的括号放入栈中,满足FILO原则 5.但拿到右括号时进行匹配,如果匹配成功,那么就出栈,如果失败就返回false 定义

    2024年02月06日
    浏览(31)
  • C语言经典算法之括号匹配算法

    目录 前言 A.建议 B.简介 一 代码实现 二 时空复杂度 A.时间复杂度分析 B.空间复杂度分析 三 优缺点 A.优点: B.缺点: 四 现实中的应用 1.学习算法最重要的是理解算法的每一步,而不是记住算法。 2.建议读者学习算法的时候,自己手动一步一步地运行算法。 tips:文中的(如

    2024年02月21日
    浏览(28)
  • 倾向得分匹配只看这篇就够了

    倾向得分匹配模型是由Rosenbaum和Rubin在1983年提出的,首次运用在生物医药领域,后来被广泛运用在药物治疗、计量研究、政策实施评价等领域。倾向得分匹配模型主要用来解决非处理因素(干扰因素)的偏差。 ‍1、基本原理——反事实推断 基本原理是 :根据处理组的特征,

    2024年02月05日
    浏览(37)
  • 用栈实现括号匹配算法(超详细,超易懂)

     首先我们要明白栈是如何实现这个算法的,在实现算法的过程当中, 栈的作用就是储存左括号,例如储存\\\"[\\\" \\\"}\\\"  \\\'(\\\" 这三种左括号 在程序当中,首先遍历传入的算数组,剔除一些其他的数字,在这里只比较左右括号,然后先将左括号储存到栈当中,例如(((( ] ] ],先将

    2024年02月06日
    浏览(36)
  • C语言 数据结构--栈 括号匹配算法

    今天这一期使用栈来完成括号匹配算法 ① 栈结构 ② 初始化栈 ③ 入栈 ④ 出栈 ⑤ 判断栈是否为空 ⑤ 括号匹配 完整代码: 结果: (1)括号序列为char str[]={\\\'(\\\',\\\'{\\\',\\\'[\\\',\\\']\\\',\\\'}\\\',\\\')\\\'}; (2)括号序列为char str1[]={\\\'{\\\',\\\'(\\\',\\\'}\\\',\\\']\\\'};    

    2024年02月05日
    浏览(38)
  • 【数据结构】【栈】括号匹配算法(可直接运行)

    假设表达式中允许包含三种括号:()、[]、{},其嵌套的顺序任意,即([]{})或[()[]{}]等均为正确的格式,实现一个算法,完成对表达式中括号的检验。 考虑以下括号序列: [ ( [ ] [ ] ) ] 分析如下: (1)计算机接收第一个括号 [ 后,等待与之匹配的 ] 出现。 (2)接收第二个括号

    2024年04月17日
    浏览(42)
  • [保研/考研机试] 括号匹配问题 C++实现

    在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来的字符串,并在下一行标出不能匹配的括号。不能匹配的左

    2024年02月13日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包