1、题目
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.
2.算法
public int longestValidParentheses(String s)
{
if (s == null || s.length() == 0)
{
return 0;
}
int start = 0;
int max = 0;
LinkedList<Integer> stack = new LinkedList<Character>();
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;
}
这道题的步骤是
1.遇到左括号进栈
2.如遇到右括号,如果此时栈为空,则不符合要求,此时最佳开始加一,如果栈不为空,则出栈,如果此时为空,计算此时最佳长度,如果不为空,则最佳长度为当前栈顶元素的位置下一位到当前元素的距离