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

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

这题目真是越做越难了。

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

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

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

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

具体来说分三种情况:

  • 当前元素为‘(’,则最后取该元素时一定没有有效括号,所以元素取为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;
    }
};

相关文章:

  • VS Code 的 .S 汇编文件里面的注释不显示绿色
  • 在spark中,窄依赖算子map和filter会组合为一个stage,这种情况下,map和filter是在一个task内进行的吗?
  • 玄机靶场-webshell查杀WP
  • viewmodel协程中执行耗时操作,导致viewmodel创建两次,导致observer失效
  • Linux 网络基础知识总结
  • 供应S620 支持 PD 的多协议双向快充移动电源解决方案
  • 保护PCBA的不同方法:喷三防漆 vs 镀膜
  • Ajax------免刷新地前后端交互
  • 力扣DAY46-50 | 热100 | 二叉树:展开为链表、pre+inorder构建、路径总和、最近公共祖先、最大路径和
  • 英伟达开源253B语言模型:Llama-3.1-Nemotron-Ultra-253B-v1 模型情况
  • #Hash 模式 vs History 模式
  • MCP基础学习四:MCP在AI应用中的集成(MCP在AI应用中的完整架构图)
  • 备赛蓝桥杯-Python-考前突击
  • EPLAN许可证更新教程
  • FTPClient开发遇到的坑
  • 新手宝塔部署thinkphp一步到位
  • 两个有序序列合并算法分析
  • MySQL数据库编程总结
  • 【SQL】常见SQL 行列转换的方法汇总 - 精华版
  • GHG认证是什么,GHG认证的意义?对企业发展好处
  • 中小企业的网站建设 论文/个人网站的制作
  • 做网站前途如何/体验营销案例
  • 通信建设网站/爱战网关键词查询网站
  • 网站建设 电子政务/站长工具百科
  • 呼伦贝尔网站建设维护/贵州seo技术培训
  • 装饰公司怎样做网站/无锡seo培训