Python解决合法括号问题

 作业习题如上:

搜索了许多做法发现使用堆栈来解决似乎是最优方法,但是鉴于我学习尚浅,(课程知识)还没有学到数据结构,所以通过模仿大佬的算法原理用列表解决这个问题。

(Stack建立也是通过列表来完成,其中原理应该是相通的)

def check_str(strings):
    #建立key和value互为匹配括号的字典
    dic = {'(':')',
            '[':']',
            '{':'}'}
    #建立空列表用于储存左括号,建立右括号的列表
    lst = []
    lst2 = [')',']','}']

    #对字符串进行for循环逐一检查
    for s in strings:
        #如果字符为左括号则存储于lst
        if s in dic:
            lst.append(s)
        elif s in lst2:
            if len(lst) != 0:
                if dic[lst[-1]] != s:
                    #如果字符为右括号且lst不为空列表
                    #且字符无法与lst末尾括号对应,
                    print("There is a mistake...")
                #如果字符为右括号且对应则删除lst末尾括号
                else:
                    lst.pop(-1)
            #如果列表空出现右括号也return False
            else:
                print("There is a mistake...")

这样写的结果就是整个代码看起来十分冗余,感觉还是有可以改进的地方。

(There is a mistake...是不想打了的结果,正常应该是return False)

贴一下大佬的堆栈解法:https://leetcode.cn/problems/valid-parentheses/solution/valid-parentheses-fu-zhu-zhan-fa-by-jin407891080/

 其中算法原理讲解得很清楚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值