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.
LeetCode: https://oj.leetcode.com/problems/longest-valid-parentheses/
题解:本题要求解最长的连续合法括号对的长度,我们可以将 '(' 的索引 i 保存在一个堆栈中;
当遇到第i个元素为 ')' 时:1. 如果堆栈为空,则说明合法括号对不包含当前的" ) ",我们令合法的开始索引start = i+1
2. 如果堆栈不为空,pop栈顶元素,此时如果堆栈不为空,则合法括号对的长度为i - stack.peek();此时如果堆栈为空,则合法括号对的长度为 i - start +1
为什么需要记录start?考虑实例"()()",如果没有记录start,我们将不知道合法括号对的起始索引
代码如下:
public class Solution {
public int longestValidParentheses(String s) {
if(s==null || s.length()==0)
return 0;
LinkedList<Integer> stack = new LinkedList<Integer>();
int start = 0;
int max = 0;
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)=='(')
{
stack.push(i);
}
else
{
if(stack.isEmpty())
{
start = i+1;
}
else
{
stack.pop();
max = stack.isEmpty()?Math.max(max,i-start+1):Math.max(max,i-stack.peek());
}
}
}
return max;
}
}