32. 最长有效括号

简介: 32. 最长有效括号

题目

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

示例 1:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

一、解题思路

看见最长子串问题,我们可以考虑以i位置为结尾,能扩到最远的距离
在这一题中,我们可以使用这种思路
我们用一个pre变量,记录上一个最长有效括号的最左边界的上一个位置,
当i来到某个位置,有2种情况
1)i位置与pre位置不匹配,dp[i]=0;
2)i位置与pre位置匹配,dp[i]=dp[pre-1]+2

二、代码

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

总结

看到最长子串问题我们需要想到以i位置结尾或者开头,分析邻近位置与i的关系,推出动态规划公式

相关文章
每日三题-有效的括号、最长有效括号、最小栈
每日三题 有效的括号 最长有效括号 最小栈
118 6
每日三题-有效的括号、最长有效括号、最小栈
|
6月前
|
存储 算法 索引
给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。如何解答呢?
给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。如何解答呢?
|
7月前
|
存储 算法 索引
【面试题】最长有效括号
【面试题】最长有效括号
65 0
|
机器学习/深度学习 存储 人工智能
|
10月前
|
存储
【字符串】最长不含重复字符的子字符串
【字符串】最长不含重复字符的子字符串
|
测试技术
最长不重复子串
题目1530:最长不重复子串 时间限制:1 秒内存限制:128 兆特殊判题:否提交:816 解决:263 题目描述: 最长不重复子串就是从一个字符串中找到一个连续子串,该 子串中任何两个字符都不能相同,且该子串的长度是最大的 。 输入: 输入包含多个测试用例,每组测试用例输入一行由小写英文 字符a,b,c...x,y,z组成的字符串,字符串的长度不大于 10000。
1323 0
|
10月前
|
索引
leetcode-1624:两个相同字符之间的最长子字符串
leetcode-1624:两个相同字符之间的最长子字符串
46 0