📅  最后修改于: 2023-12-03 15:12:46.291000             🧑  作者: Mango
这是一道数据结构题,需要使用栈来解决。
给定一个仅包含圆括号的字符串,判断是否是合法的表达式。
例如: "()()","(()())()",但不包括 ")(","(()","())"
输入:"()()"
输出:true
可以使用栈来判断,遇到 '(' 就将其入栈,在遇到 ')' 时,弹出栈顶元素并判断是否为 '(', 如果是,则表达式合法。
如果栈为空时遇到 ')' 或者遍历完字符串后栈不为空,说明表达式不合法。
class Solution:
def isValid(self, s: str) -> bool:
stack = []
match = {'(': ')', '[': ']', '{': '}'}
for c in s:
if c in match.keys():
stack.append(c)
elif not stack or match[stack.pop()] != c:
return False
return not stack
遍历一次字符串,所以时间复杂度为 O(n)。
最坏情况下栈需要存储所有的左括号,所以空间复杂度为 O(n)。