The Ten Day 有效的括号

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

    有效字符串需满足:
    
    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。
    
    示例 1:
    
    输入: "()"
    输出: true
    示例 2:
    
    输入: "()[]{}"
    输出: true
    示例 3:
    
    输入: "(]"
    输出: false
    示例 4:
    
    输入: "([)]"
    输出: false
    示例 5:
    
    输入: "{[]}"
    输出: true
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-parentheses
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
    """

    """
    @author : jiyanjiao
    @date :2020-4-8
    """
    
    # 基本解法
    @staticmethod
    def isValid(s):
        """
        :type s: str
        :rtype: bool
        """
        for i in s:
            if i == "(":
                index_begin = s.find("(")
                index_end = s.find(")")
                if index_end == -1:
                    print("False")
                    return
                index_r1 = s.find("[", index_begin, index_end)
                index_r2 = s.find("{", index_begin, index_end)
                index_r3 = s.find("]", index_begin, index_end)
                index_r4 = s.find("}", index_begin, index_end)
                if index_r1 == -1 and index_r2 == -1 and index_r3 == -1 and index_r4 == -1:
                    print("True")
                else:
                    print("False")
            elif i == "[":
                index_begin = s.find("[")
                index_end = s.find("]")
                index_r1 = s.find("(", index_begin, index_end)
                index_r2 = s.find("{", index_begin, index_end)
                index_r3 = s.find(")", index_begin, index_end)
                index_r4 = s.find("}", index_begin, index_end)
                if index_r1 == -1 and index_r2 == -1 and index_r3 == -1 and index_r4 == -1:
                    print("True")
                else:
                    print("False")
            elif i == "{":
                index_begin = s.find("{")
                index_end = s.find("}")
                index_r1 = s.find("(", index_begin, index_end)
                index_r2 = s.find("[", index_begin, index_end)
                index_r3 = s.find(")", index_begin, index_end)
                index_r4 = s.find("]", index_begin, index_end)
                if index_r1 == -1 and index_r2 == -1 and index_r3 == -1 and index_r4 == -1:
                    print("True")
                else:
                    print("False")
    
    # 其他作者解法
    @staticmethod
    def isValid1(s):
        """
        :type s: str
        :rtype: bool
        """
        stack = []  # 设置一个列表,把该列表当做栈来使用即可。
        dic = {')': '(', '}': '{', ']': '['}  # 使用字典存储括号,并且右括号为key,左括号为value
        for char in s:
            if char in dic.values():  # 左括号就入栈
                stack.append(char)
            elif char in dic.keys():  # 有右括号的话就进行比较,
                if stack == [] or dic[char] != stack.pop():
                    return False
            else:
                return False  # 不再字典中的输入直接输出错误
    
        return stack == []  # 如果栈最后是空的,那么则符合要求,输出true,如果不是,则输出false,使用一个条件表达式

   
if __name__ == '__main__':
    s = Solution
    ss = "(]"
    s.isValid1(ss)
   
    

 

posted @ 2020-04-08 13:39  jiyanjiao  阅读(139)  评论(0编辑  收藏  举报