括号序列【刷题记录】

一、题目描述

给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。

输入:"["
返回值:false

输入:"[]"
返回值:true

二、解题思路

(一) 栈+哈希表

算法流程

1、构建哈希表 k,其中key为 右括号,value为左括号
2、遍历字符串
1).判断字符是否在 k.values() 中;
若在其中则字符入栈;
否则判断栈是否为空 或者 该字符的 values 是否与 栈顶元素相同;若不同则直接返回 false,若相同则栈顶元素出栈
3、判断栈内元素是否为空,为空则返回 true,反之返回 false
在这里插入图片描述

#
class Solution:
    def isValid(self , s ):
        # write code here
        # 哈希表
        k = {'}':'{', ')':'(', ']':'['}
        stack = []
        # 遍历字符串
        for a in s:
            if a in k.values():
                stack.append(a)
            elif not stack or k[a] != stack.pop():
                return False
        # 如果栈内没有字符则表示 true,反之则 false
        return len(stack) == 0

(二) 栈

创建一个栈用来存储括号,具体思路如下:

1.如果栈为空则直接入栈,遍历下一个括号
2.若不为空且为(、[、{ 中一种则入栈
3.接下来依次比对括号是否为)、}、]中的一种,并与栈顶元素匹配,匹配则出栈,不匹配直接返回False
4.最后判断栈是否为空,为空则输出true,否则输出false

1、遍历字符串遇到 ‘(’ ‘[’ ‘{’ 左括号,就把相应的右括号(‘)’ ‘]’ ‘}’)入栈
2、如果遍历遇到右括号 ‘)’ ‘]’ ‘}’ ,则判断是否和栈顶元素相同
:::不同则直接返回false相同则将栈顶元素出栈
3、遍历结束判断栈是否为空输出true,否则输出false
在这里插入图片描述

在这里插入图片描述

class Solution:
    def isValid(self , s ):
        # write code here
        stack = []
        for i in s:
            if not stack:
                stack.append(i)
                continue
            if i in ['(','{','[']:
                stack.append(i)
            elif i == '}' and stack[-1]== '{':
                stack.pop()
            elif i == ']' and stack[-1]== '[':
                stack.pop()
            elif i == ')' and stack[-1]== '(':
                stack.pop()
            else:
                return False
        return True if not stack else False
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值