有效括号序列
题目
描述
给出一个仅包含字符’(’, ’)’
, ’{’, ’}’
, ’[‘和’]’
, 的字符串,判断给出的字符串是否是合法的括号序列,括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"
不合法。
数据范围:字符串长度 0≤n≤10000
要求:空间复杂度O(n)
,时间复杂度O(n)
思路
采用进栈出栈的思想,先进后出,后进先出,如果碰到左字符,就进栈,如果遇到右字符,则它对应的左字符就应该出栈。如果没有对应的左字符或者栈为空,就说明输入字符串就是不合法的括号序列。
代码:
class Solution:
def isValid(self, s: str)->bool:
map_dict = {"{": "}", "[": "]", "(": ")"}
stack = []
for item in s:
if item in map_dict.keys():
stack.append(item)
else:
if len(stack) == 0 or item != map_dict[stack[-1]]:
return False
else:
stack.pop()
if len(stack) != 0:
return False
return True