堆栈的应用,括号匹配问题

本文介绍了如何利用堆栈这一数据结构解决括号匹配问题。通过建立哈希表存储括号,按照先进后出的原则,遍历字符串并检查字符是否为哈希表中的key,将其入栈。遇到非key字符时,取出栈顶元素,判断其value是否匹配当前字符。循环结束后,检查栈中元素数量,若为1则匹配成功,否则失败。同时,预先判断括号总数的奇偶性,单数则直接返回错误。
摘要由CSDN通过智能技术生成

在这里插入图片描述
堆栈是一种数据结构,类似于往长宽都是乒乓球直径的乒乓球盒子里放乒乓球,先放进去的后面才能取出来,有先进后出的性质。也就是它的一端是浮动的,另一端是固定的,数据的插入删除都必须在浮动的一端进行,所以它严格遵循“先进后出,后进先出”的规律。
为了能能够很快的匹配三种括号的左右两边,采用哈希表来存储括号,例如可以把左边 “{” 设为key,把右边 “}” 设为value。建立 mapping = {"{":"}", "(":")", "[":"]"}
由于堆栈存在边界问题,所以要在里面先加一个字符,可以避免以后出现的很多麻烦。
我们的思路就是,先检查一个字符是否是哈希表中的一个key,如果是,则把它放入栈中,如果不是,则要将栈顶的元素取出,然后判断这个栈顶元素为key时,value的值是否为该字符,if mapping.get(top_element) is not char : 如果不是,则返回false。循环所有的字符。
循环结束后,我们最后要检查的就是这个栈中的元素最后是否为1,如果是1,则我们所有的括号都是匹配的,如果不是1,则不匹配,返回false。
我们都知道,匹配的括号一定是双数个,所以我们会先判断一下括号的单双数,如果是单数,直接返回false就可以啦。具体的python3代码如下:

*堆栈的区别:(1)程序内存布局场景下,堆与栈表示两种内存管理方式;例如:char *p = new char[5]指针p 存放在栈中,栈主要用于存放函数的参数值、局部变量等。堆由开发人员分配和释放, 若开发人员不释放,new出来的内容放置在堆中。
*(2)数据结构场景下,堆与栈表示两种常用的数据结构。我们用到的就是这种数据结构啦~**
class Solution:
    def isValid(self, s: str) -> bool:
        """
        :type s: str
        :rtype: bool
        """
        stack = []
        mapping = {}
        stack.append("?")
        a = len(s)%2
        if len(s) % 2 is not 0:
            return False
        mapping = {"{":"}", "(":")", "[":"]"}
        for char in s:
            a = mapping.get(char)
            if char in mapping.keys():
                stack.append(char)
            else:
                top_element = stack.pop()
                if mapping.get(top_element) is not char:
                    return False
        while len(stack) is 1:
            return True
        else:
            return False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值