LeetCode有效的括号

 题目描述:

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([)]"

输出:false

示例 5:

输入:s = "{[]}"

输出:true

思路分析

    这道题是数据结构中讲栈时的经典案例啦。所以也不用想太多啦,就是套路,用栈即可!

    具体操作就是遍历给定的括号串,逐一放入栈,如果放入的是“右括号,如},],)”就在放入栈的同时检查此时放入的元素和栈顶元素是否配对:如果配对,则将这一对从栈中去除;如果不配对,说明出现了例3的情况,不合法直接返回False。值得注意的是,如果整个括号串只有一个’]’,该右括号也不能找到与它匹配的左括号,也返回False。

    若没有返回False,一直遍历至括号串最后,如果栈为空了,证明所有括号都配对成功被去除了,则最终合法,返回Ture;若最后不为空(如剩下个‘{’),则不合法,返回False

代码:

class Solution(object):

    def isValid(self, s):

        stack =[]#定义一个栈

        for ss in s:#遍历括号串

            if ss=='(' or ss=='[' or ss=='{':

                stack.append(ss)#如果是右括号就放进栈

            elif ss==')':#如果是左括号,就要看一下是否有对应匹配

                if stack and stack[-1]=='(':#匹配的话,就除去这一对括号

                    stack.pop(-1)

                else:

                    return False #一旦不匹配,直接False

            elif ss==']':

                if stack and stack[-1]=='[':

                    stack.pop(-1)

                else:

                    return False

            elif ss=='}':

                if stack and stack[-1]=='{':

                    stack.pop(-1)

                else:

                    return False

        if len(stack)==0:#遍历到最后,看看栈是否为空了

            return True#为空则说明合法,全都配对完了

        return False #其他情况就是不合法。       

  这道题是难度简单+栈入门必做题~

posted @ 2021-12-04 13:34  JunanP  阅读(6)  评论(0)    收藏  举报  来源