1.思路:通过栈实现括号时候匹配,对于左边的括号直接入栈,对于右边的括号就取出栈顶元素进行对比,若不属于同一种类型,则返回错误,最后判断栈是否为空,若为空则返回正确。
2.知识点:
对于python栈的使用:只能通过访问其一端来实现数据存储与检索的线性数据结构
- 声明栈:stack=[],
- 添加元素:stack.append()
- 取栈顶元素:stack.pop()
3.扩展点:
对于python队列的使用:先进先出特征的线性数据结构,元素的增加只能在一端进行,元素的删除只能在另一端进行。能够增加元素的队列一端称为队尾,可以删除元素的队列一端则称为队首。
>>> from collections import deque
>>> queue = deque(["aa", "bb", "cc"])
>>> queue.append("dd") # deque(['aa', 'bb', 'cc', 'dd'])
>>> queue.append("ee") # deque(['aa', 'bb', 'cc', 'dd','ee'])
>>> queue.popleft() # deque(['bb', 'cc', 'dd','ee'])
4.代码
class Solution:
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
stack=[]
map={"(":")","{":"}","[":"]","#":"#"}
for char in s:
if char in map.keys():
stack.append(char)
else:
top_element=stack.pop() if stack else '#'
if map[top_element]!=char:
return False
return False if stack else True
5.总结
对于取栈顶元素的时候,需要判断是否为空,对于map中应存在#的对应值