力扣算法第20题(有效的括号)(与栈有关)

一、题目如下:

二、题目分析

①倘若字符串的长度为奇数个,则必然不是有效字符串,因为无法全部配对,所以首先判断奇偶;

②由于是左边的 ‘[’,‘{’,‘(’ 分别与右边的 ‘]’,‘}’,‘)’ 配对,所以遍历字符串时, ‘[’,‘{’,‘(’ 要在对应的 ‘]’,‘}’,‘)’前面;类似于这样的对称结构,用栈来做可以以达到意想不到的效果;

③栈是一种操作受限的线性表只允许从一端插入和删除数据,栈的一个最重要的特征就是栈的插入和删除只能在栈顶(也就是对应表的末尾)进行,所以每次删除的元素都是最后进栈的元素,故栈也被称为后进先出表;

④插入用append(在栈的末尾插入),删除用pop(在栈的末尾删除);

⑤关于pop,今天写程序时,发现了一个我之前一直疏忽的知识,还是我的基础太差了;

就是对于list.pop()的理解,以前我一直不知道,它竟然还可以是一个可以被打印的对象,不仅仅是一个方法;

⑥代码如下:

#函数部分
class Solution:
    def func(self,s):
        if len(s)%2!=0:
            return False
        stack=[]
        dict={')':'(','}':'{',']':'['}
        for i in s:
            if i not in dict:   #这里只匹配字典的键,若不在键中,则为假!
                stack.append(i)
            elif not stack or dict[i]!=stack.pop():    
                return False
#这里栈为空,只有一种情况:字符串第一个元素为')',']','}'其中的一个,它们不会被插入进去,这种情况很明显不是有效字符串。
        return not stack    
#当所有的'(','[','{'被配对后,便会被删除,所以若为有效字符串,则最终栈为空!

#运行部分
s='(){}'
a=Solution()
print(a.func(s))

 三、以上,便是我对于这道题的理解与分析。分析的不是太好,但接下来我会继续努力的。

这是我第一次写博客,如有什么不妥的地方,还望多多批评指正!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值