Leetcode 32 Longest Valid Parentheses
题解
用栈来模拟整个过程。首先在栈里放入一个-1,-1用来以后计算位置使用。
当目前字符是左括号,那么入栈;
当目前字符是右括号,把栈中最上面元素pop出来,代表去掉一个潜在的对应左括号。
此时分为两种情况:
- 栈中有对应的左括号。此时直接计算当前位置与pop后栈顶元素的差即可,同时维护最大值
- 栈为空。此时代表这个右括号没有对应左括号。此时把当前位置入栈,和-1的原理一样,用于计算未来的括号长度。
最后维护的最大值即是答案
代码
class Solution {
public int longestValidParentheses(String s) {
int maxlen = 0;
Stack<Integer> stk = new Stack<>();
stk.push(-1);
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '(') {
stk.push(i);
} else {
stk.pop();
if(stk.isEmpty()) {
stk.push(i);
} else {
maxlen = Math.max(maxlen, i - stk.peek());
}
}
}
return maxlen;
}
}