LeetCode 20. 有效的括号

20. 有效的括号

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

链接 https://leetcode.cn/problems/valid-parentheses/

个人思路
  1. 一开始想到,有效的括号存在一个特点,就是最右边的左括号其右边必然为其右括号,所以只需要找到最右边的左括号的位置(rfind函数),接着判断其右边是否为其右括号即可,不是则直接返回false,否则replace后接着判断
class Solution:
    def isValid(self, s: str) -> bool:
    #    while (len(s)) > 1:
    #         brackets1 = s.rfind('(')
    #         brackets2 = s.rfind('[')
    #         brackets3 = s.rfind('{')
    #         maxBrackets = max(brackets1,brackets2,brackets3)
    #         if maxBrackets == len(s) - 1:
    #             return False
    #         if brackets1 == maxBrackets:
    #             if s[maxBrackets + 1] == ')':
    #                 s = s.
  1. 写到一半后发现为什么不直接把最小的括号都replace呢,于是有了下面的题解:
    (不得不说,python的函数方法真的多)
class Solution:
    def isValid(self, s: str) -> bool:
        sLen = len(s)
        while sLen>0:
            s = s.replace('()','')
            s = s.replace('[]','')
            s = s.replace('{}','')
            # 如果替换前后字符长度不变说明没有有效括号
            if sLen == len(s):
                return False
            sLen = len(s)
        return True

但用时较长,看了别人的思路才发现,这里应该是考察栈的应用

复杂度分析

时间复杂度:略
空间复杂度:略

其他思路

在Python中,None、False、空字符串""、0、空列表[]、空字典{}、空元组()都相当于False

 def isValid(self, s: str) -> bool:
        match_dic = {')':'(', ']':'[', '}':'{'}
        temp_list = []
        for ch in s:
            if ch in '([{':
                temp_list.append(ch)
            elif ch in ')]}':
                # 右括号比左括号先出现, 不能闭合
                if not temp_list:
                    return False

                # 遇到右括号, 必然要与上一个左括号闭合, 如果不匹配就 False
                if match_dic[ch] == temp_list[-1]:
                    temp_list.pop(-1)
                else:
                    return False
        # 正常闭合的情况下, 栈里面应该全都弹出去了, 所以应该是空的
        if not temp_list:
            return True
        else:
            return False

复杂度分析
时间复杂度:O(N)。遍历了一遍字符串。
空间复杂度:O(N)。最坏情况下,假如输入是 (((((((,栈的大小将是输入字符串的长度。

作者:z1m
链接:https://leetcode.cn/problems/valid-parentheses/solution/zhu-bu-fen-xi-tu-jie-zhan-zhan-shi-zui-biao-zhun-d/
来源:力扣(LeetCode)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值