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

32. 最长有效括号

Problem: 32. 最长有效括号

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

给你一个只包含 ′ ( ′ '(' ( ′ ) ′ ')' ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
我们可以使用动态规划的方法来解决这道题目。我们定义一个 d p dp dp数组,其中 d p [ i ] dp[i] dp[i]表示第i个字符串结尾的最长有效括号的长度。我们从左到右遍历字符串,对于每一个字符串,如果它是 ′ ( ′ '(' (, 那么 d p [ i ] dp[i] dp[i]一定是0, ′ ( ′ '(' (是不能够和前面的进行配对。那么我们需要找到前面能和它配对的’('的位置,这个位置就是 i − d p [ i − 1 ] − 1 i - dp[i - 1] - 1 idp[i1]1。如果这个位置存在并且字符是 ′ ( ′ '(' (,那么 d p [ i ] dp[i] dp[i]就是 d p [ i − 1 ] + 2 dp[i - 1] + 2 dp[i1]+2,再加上 d p [ p − 1 ] dp[p - 1] dp[p1],其中 p p p i − d p [ i − 1 ] − 1 i - dp[i - 1] - 1 idp[i1]1。最后,我们更新答案 a n s ans ans为所有 d p [ i ] dp[i] dp[i]中的最大值。

解题方法

1.初始化dp数组为0,ans为0。
2.从左到右遍历字符串,对于每个字符:

  • 如果它是’(',那么 d p [ i ] dp[i] dp[i]一定是0。
  • 如果它是’)‘,那么我们找到前面能和它配对的 ′ ( ′ '(' (的位置p,如果p存在并且s[p]是’(',那么 d p [ i ] dp[i] dp[i]就是 d p [ i − 1 ] + 2 + d p [ p − 1 ] dp[i - 1] + 2 + dp[p - 1] dp[i1]+2+dp[p1]

更新答案ans为所有 d p [ i ] dp[i] dp[i]中的最大值。
返回ans。

复杂度

时间复杂度:

时间复杂度: O ( n ) O(n) O(n)

空间复杂度:

空间复杂度: O ( n ) O(n) O(n)

Code

class Solution {
    public int longestValidParentheses(String str) {
        char[] s = str.toCharArray();
        int[] dp = new int[s.length];
        int ans = 0;
        for (int i = 1, p; i < s.length; i++) {
            if (s[i] == ')') {
                p = i - dp[i - 1] - 1;
                if (p >= 0 && s[p] == '(') {
                    dp[i] = dp[i - 1] + 2 + (p - 1 >= 0 ? dp[p - 1] : 0);
                }
            }
            ans = Math.max(ans, dp[i]);
        }
        return ans;
    }
}

http://www.kler.cn/a/232752.html

相关文章:

  • 不对称信息
  • 【含开题报告+文档+PPT+源码】基于Spring Boot智能综合交通出行管理平台的设计与实现
  • 使用jmeter查询项目数据库信息,保存至本地txt或excel文件1108
  • 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同?
  • SpringBoot后端解决跨域问题
  • 程序员年薪百万秘籍(一)
  • django中自定义视图样式
  • LCP 30. 魔塔游戏
  • 亲测解决vscode的debug用不了、点了没反应
  • 【开源项目阅读】Java爬虫抓取豆瓣图书信息
  • 蓝桥杯每日一题------背包问题(一)
  • 【C++】初识模板:函数模板和类模板
  • Linux I/O 重定向简介
  • DBdoctor恭祝大家龙行龘龘,前程朤朤
  • 多线程JUC:等待唤醒机制(生产者消费者模式)
  • 【react】react+es6+antd5.13.2+ts,antd表格的操作如何在父组件写?
  • LabVIEW双光子荧光显微成像系统开发
  • MPLS VPN功能组件(3)
  • itextpdf使用:使用PdfReader添加图片水印
  • 【Unity】重力场中的路径预测方法
  • 排序算法---插入排序
  • 在django中集成markdown文本框
  • Unity类银河恶魔城学习记录5-1.5-2 P62-63 Creating Player Manager and Skill Manager源代码
  • golang 通过 cgo 调用 C++ 库
  • 2024.1.30力扣每日一题——使循环数组所有元素相等的最少秒数
  • 【MySQL进阶之路】SpringBoot 底层如何去和 MySQL 交互了呢?