leetcode热题100.有效括号

Problem: 20. 有效的括号

文章目录

题目

给定一个只包括 '(',')','{','}','','' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()\[\]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

思路

我们先介绍一种特别的解法,我们可以直接调用函数将字符串中的左右括号替换为空字符串,然后判断剩余字符串的长度是否为0,这样的代码也是可以通过测试的。

bash 复制代码
class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        while True:
            l=len(s)
            s=s.replace("{}","").replace("[]","").replace("()","")
            if len(s)==l:
                break
        return len(s)==0

然后我们考虑一个更加优秀的方案,利用栈

维护一个栈,如果是左括号则入栈,如果遇到右括号,先判断栈顶元素是不是右括号对应的左括号,如果是栈顶弹出左括号,否则就返回false

对于一开始就是右括号的输入,我们加一条判断空的代码,如果当前是右括号,且栈为空说明前面没有左括号,也返回false

复杂度

时间复杂度:

我们只遍历了一遍字符串,所以是 O ( n ) O(n) O(n)

空间复杂度:

最坏的情况是字符串只有左括号,栈中包含全部元素,所以是 O ( n ) O(n) O(n)

Code

Python3 复制代码
class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        for i in s:
            if i=='(' or i=='{' or i=='[':
                stack.append(i)
            else:
                if not stack:return False
                if (i == ')' and stack[-1] == '(') or (i == ']' and stack[-1] == '[') or (i == '}' and stack[-1] == '{') :
                    stack.pop()
                else:
                    return False
        # print(stack)
        return stack == []
相关推荐
XLYcmy2 小时前
京东 算法实习一面 下+手撕
c++·python·llm·概率论·数据处理·训练·codebert
虎头金猫3 小时前
如何在群晖NAS上通过Docker部署CloudSaver?群晖部署CloudSaver教程|聚合资源搜索并实现远程访问
运维·服务器·网络·python·docker·容器·pandas
从零开始学习人工智能3 小时前
WSL2部署CUDA12+cuDNN9踩坑实录:ONNX Runtime GPU推理环境搭建全流程
python
m0_380743873 小时前
从零调用 Claude 教程
开发语言·python·node.js
罗西的思考4 小时前
【Agent OS / AIOS】AOHP 深度解读:当 OS 开始为 Agent 而设计
人工智能·算法·机器学习
min(a,b)4 小时前
学习第17天:Agent Memory 与 MCP 协议
python·学习
民乐团扒谱机4 小时前
【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比
大数据·人工智能·算法·机器学习·数学建模·matlab·组合优化
CodeBlog-star5 小时前
LLM安全实战:提示词注入与越狱攻击防御指南
python·agent·提示词攻击·越狱攻击
小柯南敲键盘5 小时前
电商图片翻译工具推荐,批量处理主图视频字幕,免费试用
大数据·人工智能·python·音视频
Nil2085 小时前
leetcode 160相交链表
算法·leetcode·链表