Leetcode练习<二十>判断括号的有效性

来源:互联网 发布:怎么联系淘宝客服 编辑:程序博客网 时间:2024/06/14 03:51

@greg 2017-08-23
判断字符串中的括号是否为成对的 –> () {} [] {([])} 均为有效的

Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’,
determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.

class Solution():    '''    首先生成一个空列表和一个字典,字典中的键和值分别为各种括号的右边和左边的样式,    首先判断字符是否属于字典中的值,    如果属于字典中的值,则加入列表中,    如果不是判断是否属于字典的键,此时再进行判断:       如果列表为空,因为该字符是括号的右边样式,如果列表为空,则说明没有与其配对的左边样式,所以为False       如果列表为中的最后一个元素与该字符在字典中对应的键不相等(即该字符不能和列表的最后一个键配对),则返回False    如果字符不属于字典中的值,则为False    注意,每调用一次stack.pop(),stack中的最后一个字符就会弹出一次,也就是说如果所有的都成对,则最后列表是空的    '''    def isValid(self, s):        stack = []        dict = {'}' : '{', ']' : '[', ')' : '('}        for char in s:            if char in dict.values():                stack.append(char)            elif char in dict.keys():                if stack == [] or dict[char] != stack.pop():                    return False            else:                return False        return stack == []    def isValid1(self, s):        stack = []        dict = {'{' : '}', '(' : ')', '[' : ']'}        for char in s:            if char in dict.keys():                stack.append(dict[char])                print(1, char, stack)            elif stack == [] or char != stack.pop():                print(2, char, stack)                return False        return stack == []if __name__ == '__main__':    s = Solution()    str = '}{'    print(s.isValid1(str))
原创粉丝点击