当前位置: 首页 > news >正文

【力扣hot100题】(089)最长有效括号

这题目真是越做越难了。

但其实只是思路很难想到,一旦会了方法就很好做。

但问题就在方法太难想了……

思路还是只要遍历一遍数组,维护动态规划数组记录截止至目前位置选取该元素的情况下有效括号的最大值。

光是知道这个还不够,看了答案才知道每次可以取两个元素。

具体来说分三种情况:

  • 当前元素为‘(’,则最后取该元素时一定没有有效括号,所以元素取为0.
  • 当前元素为')',并且前面有元素且上一个元素为'(',这种情况就等于上上个元素数组维护的值加上2。
  • 当前元素为')',并且前面有元素且上一个元素为')',这种情况就要追溯到前面有效括号再之前的元素,如果前面有有效括号并且前面的有效括号前面是'(',这时当前元素前一个元素维护的值恰好记录的那个有效括号的长度,通过减去这个有效长度再减1(原本查看上一个元素也要减1,所以一共减2)就可以得到前面有没有相匹配的'(',于是就可以得到当前维护的数=前面有效括号的长度+2(若当前右括号与前面左括号相匹配)

状态转移方程如上。

class Solution {
public:
    int longestValidParentheses(string s) {
        if(s.size()==0) return 0;
        vector<int> array(s.size()+1,0);
        int result=0;
        for(int i=2;i<=s.size();i++){
            if(s[i-1]=='(') array[i]=0;
            else if(s[i-2]=='('&&s[i-1]==')') array[i]=array[i-2]+2;
            else if(s[i-2]==')'&&s[i-1]==')'&&i>=array[i-1]+2&&s[i-array[i-1]-2]=='(') array[i]=array[i-array[i-1]-2]+array[i-1]+2;
            result=max(result,array[i]);
        }
        return result;
    }
};

相关文章:

  • 通用 Web 项目安全加固 Checklist(语言无关通用模板)
  • 【2025年认证杯数学中国数学建模网络挑战赛】A题 解题建模过程与模型代码(基于matlab)
  • ch07 部分题目思路
  • 量子指纹识别
  • 【数据结构】排序
  • golang通过STMP协议发送邮件功能详细操作
  • 化工行业电气智能化管理系统解决方案
  • CVE-2025-31486 Vite开发服务器任意文件读取漏洞复现
  • Pytorch实现基于FlowS-Unet的遥感图像建筑物变化检测方法
  • wireshark抓包,镜像端口,观察端口
  • protobuf的应用
  • 第三节:React 基础篇-React组件通信方案
  • JAVA Web_定义Servlet_1 欢迎考生
  • 客户案例 | 日事清×初心家居:多部门协作实现新品上架自动化
  • 分布式ID生成方案的深度解析与Java实现
  • Docker 常用命令指南
  • Python表达式入门指南:从基础到实践
  • leetcode-动态规划25
  • Java接口深度解析
  • B3647 【模板】Floyd
  • 石家庄有没有销售做被用的网站/简短的软文范例
  • 中国有哪些b2b的企业/朝阳区搜索优化seosem
  • 莱芜网站建设设计外包/网络市场营销策划书
  • 网站制作资质/淘宝seo是什么
  • 爱站权重查询/友链申请
  • 官方网站后台怎样做超链接/wordpress免费建站