美文网首页
leetcode32 最长有效括号

leetcode32 最长有效括号

作者: 奥利奥蘸墨水 | 来源:发表于2019-12-27 23:06 被阅读0次

题目

给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:

输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:

输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"

分析

动态规划问题。记dp[i]为遍历到第i位置的时候,以下标i结尾时的最长有效括号数。当遍历到“(”时,以其结尾,一定不为有效括号,所以为0。当以")"结尾时的状态转移方程为:

  • 当最后两个为"()"时,dp[i]=dp[i−2]+2
  • 当最后两个为"))",且dp[i - dp[i - 1] - 1]位置为"("能与i位置匹配时,dp[i]=dp[i−1]+dp[i−dp[i−1]−2]+2。

代码

class Solution {
public:
    int longestValidParentheses(string s) {
        
        int len = s.size(), res = 0;
        vector<int> dp(len, 0);

        for (int i = 1; i < len; i++){
            if (s[i] == ')'){

                if (s[i - 1] == '('){
                    dp[i] = (i >= 2 ? dp[i - 2] : 0) + 2;
                }else if (i - dp[i - 1] > 0 && s[i - dp[i - 1] - 1] == '('){
                    dp[i] = dp[i - 1] + ((i - dp[i - 1]) >= 2 ? dp[i - dp[i - 1] - 2] : 0) + 2;
                }

                res = max(res, dp[i]);
            }
        }

        return res;
    }
};

相关文章

  • leetcode动态规划问题汇总(陆续更新中。。。)

    题目 2019.12.26更新。。。 leetcode5 最长回文子串leetcode32 最长有效括号leetc...

  • LeetCode热门100题算法和思路(day3)

    LeetCode32 最长有效括号 题目详情 给你一个只包含 '('和 ')'的字符串,找出最长有效(格式正确且连...

  • leetcode32 最长有效括号

    给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 示例 2: 解题思...

  • leetcode32 最长有效括号

    题目 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1: 输入: "((...

  • 最长有效括号

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/long...

  • 最长有效括号

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

  • 最长有效括号

    难点在于()()如何匹配前面的连续(),还有(())如何处理 举例:s[i-2]==")" ()([)]=>dp[...

  • 最长有效括号

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

  • LeetCode-32-最长有效括号

    LeetCode-32-最长有效括号 题目 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的...

  • LeeCode刷题笔记4:最长有效括号

    @[TOC](最长有效括号) 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串...

网友评论

      本文标题:leetcode32 最长有效括号

      本文链接:https://www.haomeiwen.com/subject/tbjjoctx.html