思路
== 左边的括号:[ { (,右边的括号:] } ) ==
括号匹配:一个左边括号(如"(“)与最近的右边括号相对应(此时应为”)"),这很符合栈的性质(后进先出),利用栈来实现匹配的过程如下:
遇到左侧括号,将其对应的右侧括号入栈;遇到右侧括号,从弹出栈顶元素。遍历完成,若括号全部匹配则栈为空。
** 括号不匹配的情况**
情况一:左边的括号多了,如:{[()],说明在栈顶元素没有完全弹出,遍历结束栈不为空;
情况二:右边括号多了,如:([])),说明栈中没有足够多的元素可以弹出,弹出栈顶元素时需判断栈是否有元素;
情况三:左右侧括号不匹配,如([}),说明弹出的栈顶元素与比较元素不相等,弹出元素要加值比较。
class Solution:
def isValid(self, s: str) -> bool:
stack = []
for i in s:
#入栈
if i == '(':
stack.append(')')
elif i== '[':
stack.append(']')
elif i == '{':
stack.append('}')
#弹出栈顶元素
elif not stack or stack[-1] != i: #栈顶在列表末尾
return False
else:
stack.pop()
#栈空判断
return True if not stack else False
#完全匹配 ,栈应该为空
2178

被折叠的 条评论
为什么被折叠?



