python leetcode 有效的括号 【简单题】

1. 读懂题目

2. 分析,推导解法,产生思路。

解题思路:

(1)利用dict字典映射字符括号;list列表实现栈。 # 特殊处理:若字符串长度为奇数,则false;空字符串:ture

(2)取巧的方式:反复去掉配对的括号,直到没有可去除的括号为止。

(3)查看ASCII可知,()相差1,[]与{}相差2。则可以既不需要字典映射也不需要写字符。

3.代码实现

    def isValid(self, s):
        # 利用map映射字符括号;list实现栈
        # 特殊处理:若字符串长度为奇数,则false;空字符串:ture
        if len(s)%2 == 1:
            return False
        elif len(s) == 0:
            return True
        else:
            dicts = {')': '(', ']': '[', '}': '{'}
            stack = list()
            stack.append(s[0])
            for i in range(1,len(s)):
                if stack and s[i] in dicts :
                    if stack[-1] == dicts[s[i]]:
                        stack.pop()
                    else:
                        stack.append(s[i])  # 可将此处改成return False
                else:
                    stack.append(s[i])
        return not stack    # not stack:stack空则返回ture

    def isValid1(self, s):
        # 取巧的方式:反复去掉配对的括号,直到没有可去除的括号为止。
        if len(s)%2 == 1:
            return False
        elif len(s) == 0:
            return True
        else:
            s_replace = s.replace('()','').replace('[]','').replace('{}','')
            while s_replace < s:
                s = s_replace
                s_replace = s.replace('()','').replace('[]','').replace('{}','')
        return not s_replace

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值