【LeetCode】 最长有效括号(python)

题目描述

给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。

示例 1:

输入: “(()”
输出: 2
解释: 最长有效括号子串为 “()”
示例 2:
输入: “)()())”
输出: 4
解释: 最长有效括号子串为 “()()”

题目解析
本题可以通过动态规划方法进行求解,dp[i]为当前i位置有效括号长度。
1、循环遍历s,当遇到右括号时,尝试向前匹配左括号:

			if s[i] == ')':
                pre = i - dp[i - 1] - 1

2、如果是左括号,则更新匹配后的长度:

				if pre >= 0 and s[pre] == '(':
                    dp[i] = dp[i - 1] + 2

3、处理独立的括号对的情形 类似()()、()(())

					 if pre>0:
                        dp[i] += dp[pre-1]

完整代码

'''
动态规划
'''
class Solution:
    def longestValidParentheses(self, s: str) -> int:
        length = len(s)
        if not s:
            return 0
        dp = [0] * length
        for i in range(1, length):
            if s[i] == ')':
                pre = i - dp[i - 1] - 1
                if pre >= 0 and s[pre] == '(':
                    dp[i] = dp[i - 1] + 2
                    if pre > 0:
                        dp[i] += dp[pre - 1]
        return max(dp)
        

全部评论

相关推荐

02-16 10:35
已编辑
西安科技大学 后端
虚闻松声:整体应该挺好了 项目2-3个就够了。都类似第一段这么写。 构建数据闭环 推动工程创新 优化架构设计 免费修改简历,就业咨询,欢迎私信交流。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务