括号匹配就容易想到的就是用栈或队列,这个方法就是ArrayDeque,每次将"("的位置存储进去,遇到")"时弹出最近加入的左括号的位置,计算此次右括号位置与之前的左括号的位置的差值即可得到长度,保留最长长度即可。
class Solution {
public int longestValidParentheses(String s) {
if (s == null || s.length() == 0) return 0;
Deque<Integer> stack = new ArrayDeque<>();
stack.push(-1);
int res = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') stack.push(i);
else {
stack.pop();
if (stack.isEmpty()) stack.push(i);
else {
res = Math.max(res, i - stack.peek());
}
}
}
return res;
}
}