括号序列【刷题记录】

导读:本篇文章讲解 括号序列【刷题记录】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、题目描述

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

输入:”[“
返回值: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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99762.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!