LeetCode:90.最长有效括号

目录

1.最长有效括号


1.最长有效括号

设dp[i]表示以i位置结尾的最长有效括号长度,假设i位置为'),可以分为以下两种情况:

  1. i - 1位置为(,那么i - 1和i位置刚好可以拼接为一个有效括号长度为2,如果i - 2位置还有括号的话,那么dp[i] = dp[i - 2] + 2,下面用一张图来表示
  2. i - 1的位置为),如果dp[i - 1] >= 0的话,表示前面还有有效括号,并且i - dp[i - 1] - 1 >= 0,i - dp[i - 1] - 1的位置为(,dp[i] = dp[i - 1] + 2,如果i - dp[i - 1] - 2 >= 0的话,dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2],下面用图表示
cpp 复制代码
class Solution {
public:
    int longestValidParentheses(string s) {
        int n = s.size();
        vector<int> dp(n);
        int length = 0;
        for(int i = 1; i < n; i++)
        {
            if(s[i] == ')')
            {
                if(s[i - 1] == '(')
                {
                    dp[i] = 2;
                    if(i - 2 >= 0)
                        dp[i] = dp[i - 2] + dp[i];
                }
                else
                {
                    if(dp[i - 1] >= 0)
                    {
                        if(i - dp[i - 1] - 1 >= 0 && s[i - dp[i - 1] - 1] == '(')
                        {
                            dp[i] = dp[i - 1] + 2;
                            if(i - dp[i - 1] - 2 >= 0)
                                dp[i] = dp[i] + dp[i - dp[i - 1] - 2];
                        }
                    }
                }
            }
            length = max(length, dp[i]);
        }
        return length;
    }
};
相关推荐
无限进步_11 小时前
C语言宏的魔法:探索offsetof与位交换的奇妙世界
c语言·开发语言·windows·后端·算法·visual studio
Lucky“经营分析”11 小时前
经营分析师-《经营分析能力》
算法
狐5711 小时前
2025-12-04-LeetCode刷题笔记-2211-统计道路上的碰撞次数
笔记·算法·leetcode
listhi52012 小时前
激光雷达点云拟合中的ICP(迭代最近点)算法
算法
持续学习的程序员+112 小时前
强化学习阶段性总结
人工智能·算法
爱装代码的小瓶子12 小时前
【cpp知识铺子】map与set的底层AVL树
开发语言·数据结构·c++·b树·算法·链表
IT·小灰灰12 小时前
腾讯HY2.0 Think推理模型深度解析:技术突破、应用场景与实践指南
开发语言·人工智能·python·深度学习·神经网络·算法·数据分析
修炼地12 小时前
代码随想录算法训练营第二十八天 | 动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
c++·算法·动态规划
小南家的青蛙12 小时前
LeetCode第773题 - 滑动谜题
算法·leetcode·职场和发展
Felven13 小时前
C. Isamatdin and His Magic Wand!
c语言·数据结构·算法