美文网首页
leetcode(python) 20. 有效的括号

leetcode(python) 20. 有效的括号

作者: 梦vctor | 来源:发表于2019-03-07 21:05 被阅读0次
  1. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true

题目链接:https://leetcode.com/problems/valid-parentheses/

数据结构里面的题,就是利用栈对比求解,python结合list列表即可。

解题思路:若括号字符串长度为奇数肯定无效。为偶数时分两种情况,示例 2 "()[]{}"型的,相邻的为一组有效括号,示例 5"{[]}"型的,首尾的一组为有效括号。

class Solution:
    def isValid(self, s: str) -> bool:
        temp = []
        l = len(s)
        if l % 2 == 1:    # 长度为奇数直接返回False
            return False
        i = 0
        while i < l:
            if len(temp)>0:    # 为示例5型的出栈对比
                s1 = temp.pop()
                if not self.valid(s1,s[i]):
                    temp.append(s1)
                    temp.append(s[i])
                i += 1
            else:    # 为示例2型的相邻两两对比
                if not self.valid(s[i], s[i+1]):
                    temp.append(s[i])
                    temp.append(s[i+1])
                i += 2
        return len(temp) == 0

    def valid(self, s1, s2):
        if s1 == '(':
            return s2 == ')'
        elif s1 == '[':
            return s2 == ']'
        elif s1 == '{':
            return s2 == '}'
        else:
            return False

相关文章

网友评论

      本文标题:leetcode(python) 20. 有效的括号

      本文链接:https://www.haomeiwen.com/subject/epycpqtx.html