Leetcode 20.有效的括号 ----python

1. 题目描述:

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

注意:空字符串可被认为是有效字符串。

2. 解题思路

(1)法一:可用字符串的思路处理(参考leetcode讨论区代码)
(2)法二:借助栈进行处理,用栈处理这种基本方法还是要会的,基础知识要打劳,虽然代码量多一些,但是像第一种方法不是那么容易想到。
法二考虑多种情况:

  • 当字符串为空串时,认为是有效字符串
  • 当字符串元素个数为奇数时,有一个括号无法匹配,所以无效
  • 当字符串的第一个元素不是左括号时,无效
  • 其它情况:若字符为左括号,则入栈,意味着稍后处理;若遇到一个右括号,则检查栈顶元素,若相同类型,就把元素从栈顶弹出,若类型不相同,意味着无效,返回False
  • 到最后,若栈中仍有元素,意味着无效,防止“{(”这种情况的出现

3.代码实现

法一(字符串)

class Solution:
    def isValid(self, s):
        while '{}' in s or '()' in s or '[]' in s:
            s = s.replace('{}', '')
            s = s.replace('[]', '')
            s = s.replace('()', '')
        return s == ''

法二(栈)

class Solution:
    def isValid(self, s: str) -> bool:
        left=['(','[','{']
        right=[')',']','}']
        complement=['{}','()','[]']
        if s=="":#当字符串为空串时,认为是有效字符串
            return True
        #当字符串元素个数为奇数时,有一个括号无法匹配,所以无效;当字符串的第一个元素不是左括号时,无效
        if (len(s)%2==1 or s[0] in right ):
            return False
        stack=[]
        for item in s:
            if item in left:
                stack.append(item)
            else:
                combination=stack[-1]+item
                if combination in complement:
                    stack.pop()
                else:
                    return False
        return stack==[]##最后需要判断最后的stack是否为空,因为可能出现全为左括号的情况

猜你喜欢

转载自blog.csdn.net/u013075024/article/details/92806568
今日推荐