题目描述
给定一个括号字符串str,返回最长的能够完全正确匹配括号字符字串的长度。
输入描述:
输出一行字符串,代表str。
输出描述:
输出一个整数,代表括号字符串的最长有效长度。
示例1
输入
(()())
输出
6
示例2
输入
())
输出
2
解法一动态规划
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int res = getRes(s);
System.out.println(res);
}
public static int getRes(String s){
if(s==null||s.length()<2) return 0;
int pre = 0;
int res = 0;
int[] dp = new int[s.length()];
char[] arr = s.toCharArray();
for(int i=1;i<s.length();i++){
if(arr[i]==')'){
pre = i-dp[i-1]-1;
if(pre>=0&&arr[pre]=='('){
//注意这里得加括号 艹...
dp[i] = dp[i-1]+2+(pre>0?dp[pre-1]:0);
res = Math.max(res,dp[i]);
}
}
}
return res;
}
}