有效的括号

题目描述:

示例:

解法思路:(主要是编写判断函数)

准备:

由于我们是要看从后面开始判断,所以我们想到用栈的使用方法,这里先简单说明一下整体思路:第一我们要创建一个栈stack,接着创建一个键值对序列(也可理解为哈希表),将题目所给的括号对以键值对的方式存储;

主体:

接着对输入字符串的每个字符进行判断,若该字符属于键值对中的键值(即为左括号),则将其放入栈中;若为非键值(即为右括号),则要判断栈是否为空(这点很重要,非则会导致下标访问出错),若为空,则直接返回false,不为空,则与栈顶元素进行比较,如果该元素与栈顶元素对应的值相等,则匹配成功,将栈顶元素弹出,进行下个字符判断,匹配不成功也直接返回false。以此往复,直到所有字符判断完成;

结束:

最后,注意结束时不是直接返回true,还要对栈的长度进行判断,如果栈的长度不为0,则说明里面还有字符存在,不难知道,都是左括号,此时也要返回false,为0,返回true!

当然如果要问为什么中间右括号那些是可以直接返回false?

当我们摸清楚规律的时候,我们很自然的想到,如果进来一个右括号不与左括号匹配的话,那么匹配结果一定是不成功的,如果进来一个右括号时栈为空,这也是显然匹配不成功的,所以我们可以根据这些判断来排除很多种情况; 

此题的python代码展示如下:(别问我为什么用python写,因为它简单bushi)

class Solution:
    def isValid(self, s: str) -> bool:
        dic={'(':')','{':'}','[':']'}
        stack=[]
        for i in s:
            # 左括号,直接添加
            if i in dic:
                stack.append(i)
            # 非空情况下判断右括号是否能配对
            elif stack:
                if dic[stack.pop()] != i:
                    return False
            # 右键进来,栈为空,直接无解,不浪费时间
            else:
                return False
        # 防止结束时有左括号
        return len(stack)==0

此博客为本人第一篇博客,欢迎各位留言指导,感谢支持!!!



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值