一、题目如下:
二、题目分析
①倘若字符串的长度为奇数个,则必然不是有效字符串,因为无法全部配对,所以首先判断奇偶;
②由于是左边的 ‘[’,‘{’,‘(’ 分别与右边的 ‘]’,‘}’,‘)’ 配对,所以遍历字符串时, ‘[’,‘{’,‘(’ 要在对应的 ‘]’,‘}’,‘)’前面;类似于这样的对称结构,用栈来做可以以达到意想不到的效果;
③栈是一种操作受限的线性表只允许从一端插入和删除数据,栈的一个最重要的特征就是栈的插入和删除只能在栈顶(也就是对应表的末尾)进行,所以每次删除的元素都是最后进栈的元素,故栈也被称为后进先出表;
④插入用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))
三、以上,便是我对于这道题的理解与分析。分析的不是太好,但接下来我会继续努力的。
这是我第一次写博客,如有什么不妥的地方,还望多多批评指正!