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

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

    示例 1:

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


    示例 2:

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

     1 /*
     2     采用动态规划建立一个与给定字符串长度相等的数组dp,用于记录当前的有效括号长度
     3     1.从下标为1的开始遍历,若当前下标为i的字符为'('时,则跳过(默认置为0)
     4     2.若当前下标为i的字符为')’时,获取dp[]中前一个字符的数值,即dp[i-1],并获取指向的前dp[i-1]个字符下标(跳过有效括号字串,寻找前面未匹配的括号)
     5     3.若有效括号字串的前一个字符为'(',即匹配成功,当前dp[i]获得前一个的数值加二(即dp[i]=dp[i-1]+2,2分别为()括号)
     6     4.判断是否连续的有效括号:获得刚匹配成功的前一个dp数值,查看是否为0(即dp[i-2-dp[i-1]]),若不为0,则相当于连续字串,最后再加上dp[i-2-dp[i-1]].
     7 */
     8 class Solution {
     9     public int longestValidParentheses(String s) {
    10         int len=s.length();
    11         int max=0;
    12         int []dp=new int[len];
    13         for(int i=1;i<len;i++){
    14             //1.
    15             if(s.charAt(i) =='(')
    16                 continue;
    17             //2.
    18             int index=i-1-dp[i-1];
    19             if(index<0)
    20                 continue;
    21             //3.
    22             if(s.charAt(index)=='('){
    23                 dp[i]=dp[i-1]+2;
    24                 int lastindex=i-2-dp[i-1];   
    25                 if(lastindex>=0){
    26                     if(dp[lastindex]!=0)
    27                     dp[i]+=dp[lastindex];
    28                 }
    29             }
    30             if(dp[i]>max)
    31                 max=dp[i];
    32         }
    33         return max;
    34     }
    35 }


  • 相关阅读:
    string.Join()用法
    从List分组后重新组织数据
    Java学习笔记05--字符串
    Java学习笔记03--判断与循环语句
    Java学习笔记04--数组
    Java学习笔记02--运算符、表达式
    Java学习笔记01--数据类型
    Spring面试问答
    115个Java面试题和答案——终极列表(下)
    115个Java面试题和答案——终极列表(上)
  • 原文地址:https://www.cnblogs.com/lyh28/p/10512554.html
Copyright © 2011-2022 走看看