32.最长有效括号 python

【leetcode热题100】最长有效括号 给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。s = "(()"2最长有效括号子串是 "()"4最长有效括号子串是 "()()"s = ""0。 阅读详情

题目

题目描述

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

示例 1:

输入:s = “(()”
输出:2
解释:最长有效括号子串是 “()”

示例 2:

输入:s = “)()())”
输出:4
解释:最长有效括号子串是 “()()”

示例 3:

输入:s = “”
输出:0

提示:

0 <= s.length <= 3 * 104
s[i] 为 ‘(’ 或 ‘)’

题目链接

最长有效括号

题解

要解决这个问题,我们可以使用栈(stack)来帮助我们追踪括号匹配的情况。具体来说,栈可以帮助我们记住每一个未匹配的左括号的位置,当我们遇到一个右括号时,可以尝试与最近的未匹配的左括号进行匹配,并计算有效括号子串的长度。

此外,为了处理所有可能的有效括号子串,我们需要考虑从字符串的两端进行扫描。这是因为有些情况下,仅从左到右或仅从右到左的一次扫描无法覆盖所有的有效括号组合。例如,在字符串 ")(()())" 中,从左到右扫描会错过中间的 "()()" 有效子串;而从右到左扫描则能正确捕捉到这个情况。

下面是具体的算法实现:

算法步骤:

  1. 初始化变量:设置两个计数器 left 和 right 分别记录左括号和右括号的数量,以及结果变量 max_len 来保存最长有效括号子串的长度。
  2. 从左向右扫描:遍历字符串,当遇到左括号时增加 left 计数,遇到右括号时增加 right 计数。如果 left 和 right 相等,则更新 max_len;如果 right 大于 left,重置计数器。
  3. 从右向左扫描:同样地,重新遍历字符串但这次是从右往左,目的是为了捕捉那些在第一次扫描中被忽略的有效括号子串。这里需要交换 left 和 right 的角色。
  4. 返回结果:最终返回 max_len。

这种方法的时间复杂度是 O(n),因为每个字符最多被访问两次(一次从左到右,一次从右到左),空间复杂度是 O(1),因为我们只用了常数级别的额外空间。

python实现

以下是 Python 实现代码:

def longestValidParentheses(s: str) -> int:
    left = right = max_len = 0

    # From left to right
    for char in s:
        if char == '(':
            left += 1
        elif char == ')':
            right += 1
        
        if left == right:
            max_len = max(max_len, 2 * right)
        elif right > left:
            left = right = 0

    left = right = 0

    # From right to left
    for char in reversed(s):
        if char == '(':
            left += 1
        elif char == ')':
            right += 1
        
        if left == right:
            max_len = max(max_len, 2 * left)
        elif left > right:
            left = right = 0

    return max_len

解释:

  • 第一次扫描(从左到右):这一步确保了我们可以找到所有以左括号开始的有效括号子串。
  • 第二次扫描(从右到左):这一步是为了补充第一次扫描中可能遗漏的情况,即那些以右括号结束的有效括号子串。

通过结合这两个方向的扫描,我们可以准确地找出最长的有效括号子串。

提交结果

在这里插入图片描述

LeetCode 第32题:最长有效括号 题目要求我们找出一串由 ‘(’ 和 ‘)’ 组成的字符串中,最长的有效括号子串的长度。有效括号的意思是:括号能够正确配对并且嵌套。例如:"(()"2(最长有效括号是()")()())"4(最长有效括号是()()通过这两种方法,我们可以高效地解决 LeetCode 第32题——最长有效括号。栈方法利用了数据结构的特点,巧妙地解决了括号匹配的问题;而动态规划方法则是通过记录历史信息,逐步计算出最长的有效括号长度。 阅读详情

相关推荐

Brim与ZUI协同安装指南:从下载到流量分析实战

本文提供Brim与ZUI协同安装与实战指南,详细讲解从下载、环境变量配置到流量分析的全流程。通过将PCAP文件转换为ZNG格式,结合直观的Zed查询语言,这套组合能极大提升大型网络数据包的分析效率,是网络安全与运维人员进行高效流量分析的利器。

metal的博客 459

Leetcode.32-最长有效括号(两方法)_

题目链接 要统计最长的有效括号。 一般这种题目就要求最长,最优的可以考虑用动态规划来做。基本可以保证时间复杂度在O(n)。 因为DP可以利用前面的状态方程的结果,而不会造成重复运算。 DP最关键的是找出问题与状态转移方程。 对于本题而言,要求最长的的有效括号() ...

weixin_52199109的博客 2194

PTPX功耗分析实战——从脚本配置到报告解读

本文详细介绍了PTPX功耗分析的全流程,从脚本配置到报告解读,帮助工程师快速掌握芯片设计中的功耗估算技术。文章涵盖了环境搭建、波形文件处理、功耗报告解析等关键环节,并提供了实战经验和优化建议,特别适合需要提升PTPX功耗分析效率的开发者。

weixin_29248313的博客 279

LeetCode - 最长有效括号

题目描述 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 示例 1: 输入: “(()” 输出: 2 解释: 最长有效括号子串为 “()” 示例 2: 输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()” 方法一:栈 思路 1、栈用来保存读取到的括号的下标,而不是括号字符。初始时为了统一现在栈底将-1入栈,以便第一个遇到右括号与之后遇到的情况保持统一的处理 2、保持栈底元素为最后一个没有被匹配的右括号下标(初始是-1,一但-1出栈,之后栈底

qq_34599349的博客 1283

从Arduino IDE到Atmel Studio:ATmega328P开发的进阶之路

本文探讨了从Arduino IDE转向Atmel Studio进行ATmega328P开发的进阶路径。通过对比两者差异,详细介绍了Atmel Studio的环境配置、寄存器操作思维、烧录方法及高级调试功能,帮助开发者突破Arduino的封装限制,实现对单片机底层硬件的精细控制与性能优化,提升嵌入式开发的专业能力。

weixin_29193259的博客 122

Qt Creator 下载和安装

在线安装程序是一个小型的安装程序,它将在您的计算机上下载和安装 Qt Creator。离线安装程序是一个较大的安装包,您可以将其保存在本地,并在没有网络连接的情况下安装 Qt Creator。在 Qt 官方网站上,您可以找到 Qt Creator 的下载页面。Qt Creator 是一款跨平台的集成开发环境(IDE),用于开发基于 Qt 框架的应用程序。在这一步中,您可以选择是否安装 Qt Creator 的附加组件。一旦您完成了组件的选择,安装程序将开始将 Qt Creator 安装到您的计算机上。

HackLogic的博客 6821

20210511力扣第32题:最长有效括号(四种方法解)

题目 给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 输入:s = "(()" 输出:2 解释:最长有效括号子串是 "()" 输入:s = ")()())" 输出:4 解释:最长有效括号子串是 "()()" 输入:s = "" 输出:0 提示: 0 <= s.length <= 3 * 104 s[i] 为 '(' 或 ')' 题目理解: 这里说的是最长有效子串,返回长度,看一个例子: () ) ()()() 中间应该没有空格,我加上了,

EenKine的博客 1181

全志A133的AndroidSDK

本小节来学习如何下载全志安卓SDK,SDK的目录,编译和烧录提示:以下是本篇文章正文内容,下面案例可供参考以上就是整个SDK的目录和编译烧录,目的在于让初学者快速了解整个源码的目录和编译出镜像喜欢就订阅吧。

qq_24093081的博客 4054

leetcode的python实现--32. 最长有效括号

leetcode的python实现–32. 最长有效括号 题目描述 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: “(()” 输出: 2 解释: 最长有效括号子串为 “()” 示例 2: 输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()” 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-valid-parentheses 著作权归领扣网络所有。商业转载

wu2020的博客 369

matlab数学建模练习(2)练习电子科技大学数学实验

【代码】matlab数学建模练习(2)练习电子科技大学数学实验。

c_wrj_的博客 1435

【华为OD机试】真题E卷-一种字符串压缩表示的解压(C++)

有一种简易压缩算法:针对全部为小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串aaabbccccd 经过压缩变成字符串 3abb4cd请您编写解压函数,根据输入的字符串, 判断其是否为合法压缩过的字符串若输入合法则输出解压缩后的字符串 否则输出字符串!error来报告错误。

u014481728的博客 894

Python描述 LeetCode 32. 最长有效括号

给你一个只包含 和 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1: 示例 2: 示例 3: 提示:动态规划。

一起加油 481

Chrome DevTools MCP 实战完整教程

本教程介绍了Chrome DevTools MCP(Model Context Protocol)在智能Web测试中的应用。该系统通过MCP协议将Chrome开发者工具能力标准化,并与AI结合,提供了统一的测试解决方案。核心功能包括智能自动化、深度调试分析和性能监控优化。教程详细讲解了环境搭建、MCP服务器配置、参数说明及多种工具集(输入自动化、导航、设备仿真、性能分析等)的使用方法。通过mcp-use库的MCPAgent和MCPClient组件,用户可以轻松实现自然语言驱动的浏览器操作和测试流程管理。

blues_C的博客 3805

LeetCode 32. 最长有效括号 | Python

使用栈,解决《32. 最长有效括号》问题

"大梦三千秋的博客 1082

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LeetCode32 最长有效括号Python

题目:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" class Solution: def longestValidParentheses(self, s: str) -&gt...

R18830287035的博客 420

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LeetCode 题目 32:最长有效括号【python】

动态规划、栈和双向扫描是解决最长有效括号的三种方法,各有时间和空间权衡。本文将详细介绍

10年数据\经营分析经验,现任大厂数据分析负责人 1168

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LeetCode32. 最长有效括号(python)

给定一个只包含'('和')'的字符串,找出最长的包含有效括号的子串的长度。 示例1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 解题思路:堆栈 因为要找到包含有效括号最长的子串,所以我们要定义一个start最为当前子串的起始位置。 从头开始遍历字符...

qq_43235359的博客 646

【小白用python刷Leetcode】32. 最长有效括号

32. 最长有效括号 题目描述 解题思路 作为一个小白,表示只解出了最蠢的暴力解法。但是感觉暴力解法也并不是那么容易实现, 题解代码: def kthSmallest(self, matrix: List[List[int]], k: int) -> int: # 归并排序 def guibing(s1,s2): # 我知道函数内套函数很蠢,但是我觉得面试时候面试官应该是会让手撕归并的,况且也不难是吧 res

小白搞算法 387

最长有效括号 python_LeetCode 32. 最长有效括号 | Python

32. 最长有效括号题目给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"解题思路思路:栈题目中,要查找有效括号,有可能需要从内往外扩展,这符合栈先入后出的特性。我们先使用暴力解,来尝试解决这个问题。有效的括号...

weixin_39664962的博客 106

最长有效括号python_LeetCode 32. 最长有效括号 | Python

32. 最长有效括号题目给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"解题思路思路:栈题目中,要查找有效括号,有可能需要从内往外扩展,这符合栈先入后出的特性。我们先使用暴力解,来尝试解决这个问题。有效的括号...

weixin_39603588的博客 329

leetcode第32题python版最长有效括号

class Solution: """ 32. 最长有效括号 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 """ def longestValidParentheses(self, s: str) -> int: # 思路: 利用栈结构处理,栈底保留最后一个没有匹配的右括号的索引 # 1. 初始化和特殊处理 if not s: return

前端帅小伙 1294

LeetCode 32. 最长有效括号 Python/Java

给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 思路:1.使用栈进行操作,如果是左括号,直接入stack,如果右括号,如果stack里没有元素匹对,说明有效括号已经结束,更...

u014626513的博客 1586

leetcode32. 最长有效括号(Python3)

文章目录leetcode32. 最长有效括号方法一:动态规划思路:代码:结果:方法二:遍历两次思路:代码:结果: leetcode32. 最长有效括号 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 方法一:动态规划 思路: 本题最暴力的方法就是枚举所有的子串,然后判断这个子串是否是有效的括号,

weixin_43422466的博客 808

Leetcode32. 最长有效括号-python

难度:困难 给定一个只包含 '('和 ')'的字符串,找出最长的包含有效括号的子串的长度。 示例1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 思路:这种题采取动态规划的思想来做,首先我自己并没有想出来...也不算没想出来的吧,想出来了一半,然后去网上看一...

任萌新的小生活 800

LeetCode-Python-32. 最长有效括号

给定一个只包含'('和')'的字符串,找出最长的包含有效括号的子串的长度。 示例1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 第一种思路: 暴力法,把所有长度为偶数的子字符串全部找出来,然后判断每个子字符串是不是有效。 Python会卡在...

Keep Coding 2072

LeetCode Python - 32.最长有效括号

该算法的关键是维护一个堆栈来存储左括号的索引,然后通过推送和弹出元素来更新括号的有效子字符串的长度。维护一个堆栈来存储左括号的索引。使用值 -1 初始化堆栈的底部元素,以便于计算有效括号的长度。给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号。解释:最长有效括号子串是 “()()”解释:最长有效括号子串是 “()”输入:s = “)()())”输入:s = “(()”

xuxu96 550
上一篇: 31.下一个排列 python
下一篇: 33.搜索旋转排序数组 python
gxls2024
博客等级 码龄9年 1079粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gxls2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值