思路
第一眼看到括号匹配, 就想到了用栈
来实现, 可能是考研时王道书上也是举的这样的例子
- 遇见左括号, 进栈,
- 遇见右括号, 出栈与之相比较,
- 匹配, 循环继续进行
- 不匹配, 直接GG
- 特殊值判断, 空字符
- 返回值判断, 栈是否为空
编写
class Solution:
def isValid(self, s: str) -> bool:
if(s == ""):
return True
left_parenttheses = ['(','[','{']
right_parenttheses = [')',']','}']
s_stack = []
for i in s:
# 字符i为左括号, 入栈
if(i in left_parenttheses):
s_stack.append(i)
continue
# 字符i为右括号, 出栈与之判断
if(i in right_parenttheses):
tmp = " " if(len(s_stack) == 0) else s_stack.pop()
if(tmp == left_parenttheses[right_parenttheses.index(i)]):
continue
else:
return False
return True if(s_stack == []) else False
思考与学习
学习别人的代码, 发现在前面可以加个长度不为偶数的, 直接GG
if len(s) % 2 != 0:
return False