leetcode 20

190 阅读1分钟
#!/usr/bin/env python
# -*- coding: utf-8 -*-#
# 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
# 
#  有效字符串需满足: 
# 
#  
#  左括号必须用相同类型的右括号闭合。 
#  左括号必须以正确的顺序闭合。 
#  
# 
#  
# 
#  示例 1: 
# 
#  
# 输入:s = "()"
# 输出:true
#  
# 
#  示例 2: 
# 
#  
# 输入:s = "()[]{}"
# 输出:true
#  
# 
#  示例 3: 
# 
#  
# 输入:s = "(]"
# 输出:false
#  
# 
#  示例 4: 
# 
#  
# 输入:s = "([)]"
# 输出:false
#  
# 
#  示例 5: 
# 
#  
# 输入:s = "{[]}"
# 输出:true 
# 
#  
# 
#  提示: 
# 
#  
#  1 <= s.length <= 104 
#  s 仅由括号 '()[]{}' 组成 
#  
#  Related Topics 栈 字符串 
#  👍 2377 👎 0


# leetcode submit region begin(Prohibit modification and deletion)
class Solution(object):
    def isValid(self, s):
        stack = []
        for i in s:
            if i in ['(','[','{']:
                stack.append(i)
            else:
                if len(stack) == 0:
                    return False
                else:
                    temp = stack.pop()
                    if i == ')':
                        if temp != '(':
                            return False
                    if i == ']':
                        if temp != '[':
                            return False
                    if i == '}':
                        if temp != '{':
                            return False




        if len(stack) == 0:
            return True
        else:
            return False
# leetcode submit region end(Prohibit modification and deletion)

主要用栈来做成对match,但是因为要成对,所以多加一层if进行逻辑映射判断。另外,要考虑左符号的结果如果是0则说明没有成对括号的情况,所以也是失败的。

主体逻辑框架 左符入栈先保存现场 判断是否有左符号现场 遇到右符合,Pop左符合现场进行成对match