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;
    }
};
相关推荐
TImCheng060932 分钟前
内容运营岗位适合考哪个AI证书,与算法认证侧重点分析
人工智能·算法·内容运营
赵域Phoenix42 分钟前
混沌系统是什么?
人工智能·算法·机器学习
CoderCodingNo1 小时前
【GESP】C++五、六级练习题 luogu-P1886 【模板】单调队列 / 滑动窗口
开发语言·c++·算法
paeamecium1 小时前
【PAT甲级真题】- All Roads Lead to Rome (30)
数据结构·c++·算法·pat考试·pat
Cando学算法1 小时前
双指针之快慢指针
算法
汀、人工智能1 小时前
[特殊字符] 第100课:任务调度器
数据结构·算法·数据库架构·贪心··任务调度器
每日任务(希望进OD版)1 小时前
二分法刷题
算法·二分
会编程的土豆2 小时前
日常做题 vlog
数据结构·c++·算法
Omigeq2 小时前
1.4 - 曲线生成轨迹优化算法(以BSpline和ReedsShepp为例) - Python运动规划库教程(Python Motion Planning)
开发语言·人工智能·python·算法·机器人
网络工程小王2 小时前
【大模型(LLM)的业务开发】学习笔记
人工智能·算法·机器学习