用栈的方法
可以设置两个栈,分别是碰到'(',')',把下标放入栈中,然后碰到')',判断左括号得栈是否为空,不为空则进行下标相减,求以该右括号为结尾得最长有效括号得长度,弹出两个栈顶元素。
//也可以只用一个栈,把左括号得下标放入栈,碰到右括号,进行判断,如果栈不为空则先弹出栈顶元素表示匹配了右括号进行下标相减,逻辑类似,如果为空则要保证有最后一个没有被匹配的右括号得下标(用来计算距离)。
class Solution {
public int longestValidParentheses(String s) {
int max = 0;
Deque<Integer> deque = new ArrayDeque<Integer>();
deque.push(-1);
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == '('){
deque.push(i);
}
else{
deque.pop();
if(!deque.isEmpty()){
max = Math.max(i - deque.peek(),max);
} else {
deque.push(i);
}
}
}
return max;
}
}