欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Leetcode---栈系列刷题(python3实现)----#20有效的括号

程序员文章站 2022-03-30 22:30:03
我最近在学习python3,基础不是很好,所以准备在Leetcode上刷题,这个作为笔记记录我的,如果大家看到有错误,拜托大家帮我指出,谢谢啦~ ......

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true
class solution:
    def isvalid(self, s):
        stack = []
        flag = 1
        if(len(s)%2!=0):                                    #如果长度为奇数则一定没有匹配成功
            flag = 0
        else:
            for i in range(len(s)):                                    
                if s[i] == "(" or s[i] == "[" or s[i] == "{":
                    stack.append(s[i])
                    continue
                if stack:
                    a = stack[len(stack)-1]                 #取栈顶元素
                    if s[i] == ")":                         #如果括号可以匹配成功,则相应的左括号右括号的位置是相对的,所以可以取出栈顶元素进行比较
                        if a != "(":
                            flag = 0
                        stack.pop()                         
                    
                    elif s[i] == '}':
                        if a != "{":
                            flag = 0
                        stack.pop()
                    elif s[i] == "]":
                        if a != "[":
                            flag = 0    
                        stack.pop()
            if stack != []:                                  #如果扫描过一遍仍有元素在栈内,说明有的括号没有匹配到,则没有匹配成功
                flag = 0
        if flag == 1:
            return true
        else:
            return false

这个代码还没有bugfree,有时间我会改进的~~,欢迎大家指出我的错误和不足之处~~~一起加油~