鱼C论坛

 找回密码
 立即注册
查看: 85|回复: 1

求最长有效括号

[复制链接]
发表于 2024-10-17 09:21:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class Solution:
    def longestValidParentheses(self, s: str) -> int:
        stack=[]
        maxL=0
        n=len(s)
        tmp=[0]*n         #标记数组
        cur=0

        for i in range(n):
            if s[i]=='(':
                stack.append(i)
            else:
                if stack:
                    j=stack.pop()
                    tmp[i],tmp[j]=1,1      #匹配成功时标记    
            
        for num in tmp:    #计算连续1出现的最大次数
            if num:
                cur+=1
            else:          #遇到0时中断,进行对比,并重置
                maxL=max(cur,maxL)  
                cur=0
        maxL=max(cur,maxL) #最后一次统计可能未终断,多做一次对比
        
        return maxL
代码如上,为什么要多做一次对比
maxL=max(cur,maxL)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-17 09:21:54 | 显示全部楼层
在最后一行 `maxL = max(cur, maxL)` 中进行一次额外的比较是因为在遍历标记数组 `tmp` 的过程中,当连续的数字 `1` 中断时(遇到 `0` 时),我们才会去更新 `maxL` 并重置 `cur`。但是,如果数组 `tmp` 的最后一个元素是 `1`,那么在 `for` 循环结束时,`cur` 中可能仍会有未更新到 `maxL` 的累计值。因此,需要在循环结束之后再进行一次比较,以确保不会遗漏以最后一个元素结尾的最长连续有效括号子串。

这样可以处理下面这种情况:如果 `tmp` 的末尾有连续的 `1` 且没有被 `0` 打断,为了确保这段连续 `1` 的长度被纳入 `maxL` 的比较,必须在循环结束后再进行一次额外的更新。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 20:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表