您的位置:首页 > 其它

LeetCode_Longest Valid Parentheses

2015-09-15 11:01 267 查看
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.

分析:题目要求找出一个只包含了“(” 和 “)” 的字符串中最大的合法匹配的长度,比如
")()())"
,的最大合法匹配是4

可以考虑使用栈的数据结构,result维护一个最大的长度,循环遍历该字符串:

1、若遍历到“(”,则进栈;

2、若遍历到“)”,需要分析:

a)
若此时栈不为空,且栈顶为“(”,那么将该栈顶元素出栈。出栈后若栈为空,则返回i+1和result这两个中最大的一个;出栈后该栈不为空,则将i减去栈顶元素的值和result比较,较大的保存到result中。

b)
若此时栈为空,或栈顶为“)”,那么将该元素进栈。

Java解题:

public static int longestValidParentheses(String s) {
char c[] = s.toCharArray();
List<Integer> list = new ArrayList<Integer>();
int result=0;
for(int i=0;i<s.length();i++){
if(c[i]=='(')
list.add(i);
else{
if(!list.isEmpty()&&c[list.get(list.size()-1)]=='('){
list.remove(list.size()-1);
if(list.isEmpty())
result=Math.max(result, i+1);
else
result=Math.max(result, i-list.get(list.size()-1));
}
else
list.add(i);
}
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息