LeetCode刷题之“有效的括号“的python解法之一

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: “()”
输出: true
示例 2:

输入: “()[]{}”
输出: true
示例 3:

输入: “(]”
输出: false
示例 4:

输入: “([)]”
输出: false
示例 5:

输入: “{[]}”
输出: true
通过次数349,284提交次数829,458

class Solution:
    def isValid(self, s):
        #利用字典保存括号的映射值,方便后续对比
        vec = {"(":1, ")":-1, "[":2, "]":-2, "{":3, "}":-3, "":0}
        #用列表模拟栈,栈底元素为"",以便遍历第一个字符串时方便对比
        temp_stack = [""]
        #栈顶指针
        top = 0
        #遍历括号串
        for i in s:
            #如果当前括号和栈顶括号匹配,则将栈顶元素删除,栈顶指针-1
            if vec[i]+vec[temp_stack[top]] == 0:
                del temp_stack[top]
                top -=1
            #如果当前括号为右括号且与栈顶括号不匹配,说明此串定不合理,返回假
            elif vec[i] < 0 and vec[i]+vec[temp_stack[top]] != 0:
                return False
            #如果当前括号为左括号,则将其入栈,栈顶指针+1
            elif vec[i] > 0:
                temp_stack.append(i)
                top += 1
        #若栈中括号没有全部相互消除,则串不合理,返回假
        if top > 0:
            return False
        else:
            return True

sl = Solution()
r = sl.isValid("()")
print(r)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值