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;
}