leetcode字符串dp——32. Longest Valid Parentheses

来源:互联网 发布:手游编程用什么软件 编辑:程序博客网 时间:2024/05/22 06:18
class Solution {    public int longestValidParentheses(String s) {        int dp[] = new int[s.length()];        for(int i = 0; i < s.length(); ++i) {            if(s.charAt(i) == '(') dp[i] = 0;            else {                if(i - 1 >= 0 && s.charAt(i-1) == '(') {                    if(i-2 >= 0) {                        dp[i] = dp[i-2] + 2;                    } else {                        dp[i] = 2;                    }                } else if(i - 1 >= 0 && i-dp[i-1]-1>= 0 && s.charAt(i-dp[i-1]-1) == '(') {                    dp[i] = dp[i-1] + 2;                    if(i-dp[i-1]-2 >= 0) {                        dp[i] += dp[i-dp[i-1]-2];                    }                }            }        }//        for(int i = 0; i < s.length(); ++i) {//            System.out.print(dp[i] + " ");//        }//        System.out.println();        int res = 0;        for(int i = 0; i < s.length(); ++i) {            res = Math.max(res, dp[i]);        }        return res;    }    public static void main(String[] args) {        Solution solution = new Solution();        solution.longestValidParentheses("()(())");    }}