美文网首页
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