使用栈来求解:
class Solution {
public int longestValidParentheses(String s) {
int max = 0;
Stack<Integer> stack = new Stack<>();
stack.push(-1);
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
stack.push(i);
} else {
stack.pop();
if (stack.empty()) {
stack.push(i);
} else {
max = Math.max(max, i - stack.peek());
}
}
}
return max;
}
}
以 )()()为例:
首先创建一个空栈然后放入-1进栈,判断s.charAt(i) == ‘(’,不是则-1出栈,判断栈是否为空,为空则把 s.charAt(i) == ‘(’ 中的 i=0放入栈中,再判断s.charAt(1)== ‘(’,
是的话把1放入栈中,判断s.charAt(2)== ‘(’,不是则把i=1出栈判断栈是否为空,不为空则判断max=0和2-0谁大,则max=2;然后再是s.charAt(3) ,把i=3放入栈中, 判断s.charAt(4),不是则把i=3出栈,判断栈是否为空,不为空,则max =2和4-0谁大,则max=4;最后结束循环,return max;