leetcode之有效的括号

这道题很简单,就是用栈的可以解决了。由于发现leetcode给出的运行时间和内存消耗并不准确(同一个答案三次提交运行时间和内存消耗都不同),所以便不在给出具体的数值了。

自己写的答案

class Solution:
    def isValid(self, s: str) -> bool:
        if len(s)%2==1 or len(s)==1:
            return False
        stack = ['0']
        
        for item in s:
            if item =='(' or item=='{' or item=='[':
                stack.append(item)
                continue
            a = stack.pop()
            if (item==')'and a=='(') or (item==']'and a=='[') or (item=='}'and a=='{'):
                continue
            return False
        return len(stack)==1

官方的给出的答案,思路和我是相同和,只不过用了一些小技巧,比如用了字典(哈希映射)提高速度。
时间复杂度为 O ( n ) O(n) O(n),其中n是字符数串s的长度。
空间复杂度: O ( n + ∣ a ∣ ) O(n+|a|) O(n+a),其中 a a a表示字符集,本题中字符串包含6中括号, ∣ a ∣ = 6 |a|=6 a=6

class Solution:
    def isValid(self, s: str) -> bool:
        if len(s) % 2 == 1:
            return False
        pairs = {
            ")": "(",
            "]": "[",
            "}": "{",
        }
        stack = list()
        for ch in s:
            if ch in pairs:
                if not stack or stack[-1] != pairs[ch]:
                    return False
                stack.pop()
            else:
                stack.append(ch)
        return not stack

另一种比较巧妙的思路,但效率不高
class Solution:
    def isValid(self, s: str) -> bool:
        while '{}' in s or '()' in s or '[]' in s:
            s = s.replace('{}', '')
            s = s.replace('[]', '')
            s = s.replace('()', '')
        return s == ''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值