题目
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.
括号匹配自然就想到栈,为了能够计算出最长匹配长度,需要在栈中纪录'('的位置;
同时为了纪录“掐断”的位置,当')'无法匹配时,也放入栈中;
为了简化代码,栈初始化时放了个哨兵。
代码
import java.util.Stack;
public class LongestValidParentheses {
public int longestValidParentheses(String s) {
int max = 0;
int N = s.length();
Stack<Integer> stack = new Stack<Integer>();
stack.push(-1);
for (int i = 0; i < N; ++i) {
if (s.charAt(i) == '(') {
stack.push(i);
} else {
int index = stack.peek();
if (index != -1 && s.charAt(index) == '(') {
stack.pop();
max = Math.max(max, i - stack.peek());
} else {
stack.push(i);
}
}
}
return max;
}
}