[LeetCode 热题 100] 32. 最长有效括号

LeetCode 热题 100 32. 最长有效括号

背景

给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号 子串 的长度。

左右括号匹配,即每个左括号都有对应的右括号将其闭合的字符串是格式正确的,比如 "(()())"。

示例 1:

输入:s = "(()"

输出:2

解释:最长有效括号子串是 "()"

示例 2:

输入:s = ")()())"

输出:4

解释:最长有效括号子串是 "()()"

示例 3:

输入:s = ""

输出:0

提示:

0 <= s.length <= 3 * 10^4

si 为 '(' 或 ')'

解题思路

这题用的是堆栈的思路。

先放一个-1在栈里,是防止空栈。

遇到(就直接入栈,

如果是),先弹出一个元素。此时检查栈,

如果空了,显然是)数量大于(数量导致无法形成有效括号了,后面也不可能再利用前面的括号数量,所以直接在这里做一个隔断,把这里的下标入栈。

如果不空的话,比较现存最大长度和(目前下标-栈顶元素)-> 目前长度的最大值

代码

python 复制代码
class Solution:
    def longestValidParentheses(self, s: str) -> int:
        stack = [-1]
        max_length = 0
        cur_length = 0
        for i in range(len(s)):
            if s[i] == "(":
                stack.append(i)
            else:
                stack.pop()
                if stack == []:
                    stack.append(i)
                else:
                    max_length = max(max_length, i-stack[-1])   
        return max_length

小tips

这题官方归在了动态规划里面,但实际好像并不那么动态规划,用官方解的动态规划还会超时。

相关推荐
vx_Biye_Design6 分钟前
springboot旅游管理系统18006-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·django·课程设计
W-HM8 分钟前
MAC软件安装
动态规划
有毒的教程13 分钟前
Dev-C++ 避免爆栈(Stack Overflow)完整方案
c++·算法·深度优先
半亩码田13 分钟前
C#转Python第4.7篇:logging:Python 的标准日志库
开发语言·python·c#
在所不辞兄30 分钟前
刚性问题误差容限设置技巧
深度学习·神经网络·算法·机器学习
啊啊啊啊啊!!!!33 分钟前
unordered_map和unordered_set的使用
算法
外收内放35 分钟前
Python基础语法练习题(59-原始版本与优化版本)
开发语言·python
ASS-ASH38 分钟前
从力学与机械原理角度深度剖析:尊界V800刹车踏板支架断裂事件的技术逻辑
人工智能·python·数据可视化·机械工程·汽车安全·物理仿真·制动系统
xhy_070739 分钟前
AI 读了 .env,密钥会原样发给大模型吗?WES Code 的密钥打码(附实测)
人工智能·python·数据挖掘·flask·ai编程·wes code
泡海椒1 小时前
JQuick-Excel 实战:用 STYLE 配置单元格与区域样式
开发语言·python·excel