32. 最长有效括号


class Solution {
    //二刷没想到用动态规划。
    public int longestValidParentheses(String s) {
      if(s.equals(""))return 0;
      int[] dp=new int[s.length()];
      char[] ss=s.toCharArray();
      dp[0]=0;
      int max=0;
      for(int i=1;i<ss.length;i++){
          if(ss[i]=='(')
                dp[i]=0;
          else{//ss[i]==')'
              if(ss[i-1]=='('&&i-2>=0)
                    dp[i]=dp[i-2]+2;
              else if(ss[i-1]=='('&&i-2<0)
                    dp[i]=2;
              else{//ss[i-1]==')'
                   if(i-dp[i-1]-1>=0&&ss[i-1-dp[i-1]]=='(')
                      if(i-dp[i-1]-2>=0)
                           dp[i]=dp[i-1]+2+dp[i-dp[i-1]-2];
                      else  
                           dp[i]=dp[i-1]+2;

                    else 
                           dp[i]=0;       
              }  
          }
          //System.out.println(dp[i]);
          max=Math.max(max,dp[i]);
      }
      return max;
    }
}
posted @ 2021-06-08 14:58  wsshub  阅读(33)  评论(0)    收藏  举报