📜  门|门 IT 2005 |第 50 题(1)

📅  最后修改于: 2023-12-03 15:12:46.291000             🧑  作者: Mango

门|门 IT 2005 | 第50题

这是一道数据结构题,需要使用栈来解决。

题目描述

给定一个仅包含圆括号的字符串,判断是否是合法的表达式。

例如: "()()","(()())()",但不包括 ")(","(()","())"

样例

输入:"()()"

输出: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)。