# leetCode 32.Longest Valid Parentheses (有效的最大括号) 解题思路和方法

Longest Valid Parentheses

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.

For "(()", the longest valid parentheses substring is "()", which has length = 2.

Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.

	    public int longestValidParentheses(String s) {
int len = s.length();
if(len <= 1){
return 0;
}
int startLen;
int validLen = 0;
//长度为偶数
if((len & 1) == 0){
startLen = len;
}else{
startLen = len -1;
}
boolean isBreak = false;
while(startLen > 0){
if(isBreak) break;
for(int i = 0; i + startLen <= len; i++){
String temp = s.substring(i,i+startLen);
int k = lenValid(temp);
if(k > validLen){
validLen = k;
isBreak = true;
break;
}
}
startLen -= 2;
}
return validLen;
}
//str是否有效括号，有效返回len,无效返回-1
private int lenValid(String str){
Stack<Character> st = new Stack<Character>();
for(int i = 0; i< str.length();i++){
if(st.isEmpty() || st.peek() != '(' || str.charAt(i) != ')'){
st.push(str.charAt(i));
}else{
st.pop();
}
}
if(st.isEmpty()){
return str.length();
}
return -1;
}

    public int longestValidParentheses1(String s) {
Stack<Character> st = new Stack<Character>();//保存()
Stack<Integer> si = new Stack<Integer>();//保存()的索引
si.push(-1);//将-1作为一个分界起始值
for(int i = 0; i < s.length(); i++){
if(st.isEmpty() || st.peek() != '(' || s.charAt(i) != ')'){
st.push(s.charAt(i));//入栈
si.push(i);
}else{
st.pop();//出栈
si.pop();
}
}
//si.push(s.length()-1);
//每一个未出栈的元素都是各个有效组的分界点
int end = s.length();//起始点
int max = 0;//最大长度
while(!si.isEmpty()){
int start = si.pop();
max = end - start - 1 > max ? end - start -1:max;
end = start;
}
return max;
}

• 本文已收录于以下专栏：

## [leetcode] 20. Valid Parentheses 解题报告

• qq508618087
• 2015年12月20日 18:05
• 354

## leetCode 22.Generate Parentheses (生成括号) 解题思路和方法

Generate Parentheses  Given n pairs of parentheses, write a function to generate all combinatio...
• xygy8860
• 2015年07月06日 22:11
• 747

## LeetCode 20 Valid Parentheses (C,C++,Java,Python)

Problem: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', deter...
• runningtortoises
• 2015年05月10日 16:41
• 2672

## LeetCode(20) Valid Parentheses

• feliciafay
• 2013年12月19日 06:04
• 2893

## leetCode 20.Valid Parentheses (有效的括号) 解题思路和方法

Valid Parentheses  Given a string containing just the characters '(', ')', '{', '}', '[' and ']', d...
• xygy8860
• 2015年07月06日 17:21
• 487

## [LeetCode]Valid Parentheses

• zhouworld16
• 2013年12月28日 11:45
• 8714

## LeetCode(32)Longest Valid Parentheses

• feliciafay
• 2014年03月07日 08:31
• 1753

## C实现 LeetCode->Valid Parentheses

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu...
• liutianshx2012
• 2015年06月17日 09:51
• 534

## Valid Parentheses python题解

Valid Parentheses python题解
• xiaolewennofollow
• 2015年04月20日 12:31
• 997

## leetcode - 32.Longest Valid Parentheses

Longest Valid Parentheses
• qq_27350929
• 2017年03月02日 19:56
• 50

举报原因： 您举报文章：leetCode 32.Longest Valid Parentheses (有效的最大括号) 解题思路和方法 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)