import java.util.*;


public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return int整型
     */
    public int longestValidParentheses (String s) {
        // write code here
        
        int[] dp = new int[s.length()];
        int max = 0; // 定义一个整型变量,用于存放最终的返回结果
        for (int i = 1; i < s.length(); i++) {
            char chr = s.charAt(i); // 获取 i 位置上的字符
            if (chr == '(') { // 如果 i 位置上的字符为 '(',跳过当次循环(以 '(' 为结尾的字符串的最长括号子串肯定为 0)
                continue;
            }
            else {
                if (i-dp[i-1]-1 > -1 && s.charAt(i-dp[i-1]-1) == '(') {
                    dp[i] = 2 + dp[i-1] + (i-dp[i-1]-2 > -1 ? dp[i-dp[i-1]-2] : 0);
                }
            }
            max = Math.max(max, dp[i]);
        }
        return max;
    }
}