问题描述(原题链接)
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
代码:
class Solution {
public int longestValidParentheses(String s) {
int len = s.length();
if(len==0)
return 0;
int max=0;
//动态规划:
int[] dp = new int[len]; //表示以第i个字符结尾的最长括号
for(int i=0;i<len;i++)
dp[i]=0;
for(int i=1;i<len;i++){
//如果是以‘(’结尾一定是0,所以在这一步不用考虑
if(s.charAt(i)==')'){
if(s.charAt(i-1)=='('){
dp[i]=(i>=2?dp[i-2]:0)+2;
}else{
if(i-dp[i-1]-1>=0 && s.charAt(i-dp[i-1]-1)=='(')
dp[i]=dp[i-1]+2+(i-dp[i-1]-2>=0?dp[i-dp[i-1]-2]:0);
}
}
max = Math.max(max,dp[i]);
}
return max;
}
}