JAVA练习275-乘积最大子数组

题目概览

给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号 子串 的长度。

左右括号匹配,即每个左括号都有对应的右括号将其闭合的字符串是格式正确的,比如 "(()())"。

示例 1:

复制代码
输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"

示例 2:

复制代码
输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"

示例 3:

复制代码
输入:s = ""
输出:0

提示:

  • 0 <= s.length <= 3 * 104
  • s[i] 为 '(' 或 ')'

来源:32. 最长有效括号 - 力扣(LeetCode)

解题分析

方法:动态规划

用 dp 存储结果,分情况而论:

  1. 当 s i 为 ' ( ' 且 s i - 1 为 ')' 时,dp[i]至少为2,需要看 i - 2 是否连上了即看 dp[i - 2],可得 dp[i] = dp[i-2] + 2;

  2. 当 s i 为 ' ) ' 且 s i - 1 为 ')' 时,dp[i]得看前面差 dp[i-1] 长度是否有 '(',即当 i - dp[i - 1] - 1 >= 0 且 s[i - dp[i - 1] - 1] == '(' 时,dp[i] = dp[i-1] + dp[i-dp[i-1]-2] + 2 (加上 dp[i-dp[i-1]-2] 是因为有连着的情况)

时间复杂度: O(n)

空间复杂度: O(n)

java 复制代码
class Solution {
    public int longestValidParentheses(String s) {
        char[] cs = s.toCharArray();
        if (cs.length <= 1) {
            return 0;
        }
        int[] dp = new int[cs.length + 1];
        int longest = 0;
        for (int i = 1; i < cs.length; ++i) {
            if (cs[i] == ')' && cs[i - 1] == '(') {
                dp[i] = (i >= 2 ? dp[i - 2] : 0) + 2;
            }
            else if (cs[i] == ')' && cs[i - 1] == ')' && i - dp[i - 1] > 0 && cs[i - dp[i - 1] - 1] == '(') {
                dp[i] = dp[i - 1] + ((i - dp[i - 1]) > 2 ? dp[i - dp[i - 1] - 2]: 0) + 2;
            }
            longest = Math.max(longest, dp[i]);
        }
        return longest;
    }
}
相关推荐
天天被压力21 分钟前
【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #02】涨停跌停与特色股池:5类股池接口一次拉全
java·人工智能·python
斯维赤32 分钟前
从 @Tool 到 Agent 流水线:LangChain4j 进阶教学,一个库打全套
java·后端
zhanghaha131442 分钟前
Python进阶教程:35_PyQt (保姆级零基础教程)
开发语言·python·pyqt
SimonKing43 分钟前
SSE项目`nexus-sse`持续优化,不一样的视觉效果
java·后端·程序员
斑鸠喳喳44 分钟前
读写锁模式 Read-Write Lock
java·后端
释厄6231 小时前
多黑洞具现论·物理/生物/金融三域显化·虚拟宇宙黑洞·奇点=0 圆圈
开发语言·数据结构·人工智能·程序人生·安全威胁分析
信誓旦旦的程序猿1 小时前
【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据api
小程序设计2 小时前
本科毕设避坑|大数据 / 单片机物联网 / 网络工程 / PLC / 机械设计选题与落地心得
java·hive·hadoop·单片机
UIU1142 小时前
递归算法与汉诺塔
c++·学习·算法·c#·递归
卓怡学长2 小时前
w206基于SpringBoot的社区团购小程序设计与实现
java·spring boot·spring·intellij-idea