zoukankan      html  css  js  c++  java
  • 32. 最长有效括号

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

    示例 1:

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

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

    int dp[100004];
    class Solution {
    public:
    
        int longestValidParentheses(string s) {
             int siz = s.size();
             int ans(0);
             memset(dp,0,sizeof(dp));
             for(int i=0;i<siz;++i){
                 if(i-1>=0&&s[i]==')'&&s[i-1]=='(')dp[i]=1;
                 if(i-2>=0&&s[i]==')'&&s[i-1]=='(')dp[i]+=dp[i-2];
                 if(i-1>=0&&s[i]==')'&&s[i-1]!='('&&dp[i-1]){
                     if(i-1>=0&&i-dp[i-1]*2-1>=0&&s[i-dp[i-1]*2-1]=='('){dp[i]=dp[i-1]+1;
                     if(i-dp[i-1]*2-2>=0)dp[i]+=dp[i-dp[i-1]*2-2];
                     }
                    /// cout<<dp[i]<<endl;
                     else if(i-dp[i-1]*2-1>=0)dp[i]+=dp[i-dp[i-1]*2-1];
                 }
                 ans=max(ans,dp[i]);
             }
             return ans*2;
        }
    };
    ///dp
    //case 1:越界
    //case 2: 分类讨论没讨论清楚
  • 相关阅读:
    「专题总结」后缀自动机
    「专题总结」回文自动机
    「专题总结」后缀数组
    2.11毕设进度
    2.10毕设进度
    2.09毕设进度
    2.08毕设进度
    2.07毕设进度
    2.06毕设进度
    2.05毕设进度
  • 原文地址:https://www.cnblogs.com/DreamKill/p/13232232.html
Copyright © 2011-2022 走看看