LeetCode:90.最长有效括号

目录

1.最长有效括号


1.最长有效括号

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

  1. i - 1位置为(,那么i - 1和i位置刚好可以拼接为一个有效括号长度为2,如果i - 2位置还有括号的话,那么dpi = dpi - 2 + 2,下面用一张图来表示
  2. i - 1的位置为),如果dpi - 1 >= 0的话,表示前面还有有效括号,并且i - dpi - 1 - 1 >= 0,i - dpi - 1 - 1的位置为(,dpi = dpi - 1 + 2,如果i - dpi - 1 - 2 >= 0的话,dpi = dpi - 1 + 2 + dpi - 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;
    }
};
相关推荐
启观川17 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸17 小时前
排序算法介绍
python·算法·排序算法
动词ing18 小时前
【题目练习】算法 组合总和||
算法
longlongzihan18 小时前
链表找环:Floyd 判圈算法(LeetCode 141 & 142 )
c++·算法·leetcode·链表
专业程序开发源18 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
Logic10119 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法
yi01119 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口
极光通讯19 小时前
服务器内存来料检验(IQC)实操:批次追溯、外观判定与上机验证
java·服务器·算法
淡海水20 小时前
02-04-原理篇-GC Roots与对象图遍历
算法·unity·c#·图·gc·遍历·roots
ClickHouseDB20 小时前
ClickHouse 大规模 OpenTelemetry 数据接入架构的可靠性演进
算法