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;
}
}
本文详细介绍了如何使用栈解决LeetCode 32题——寻找字符串中最长的有效括号对。通过逐步解析算法流程,帮助读者理解栈在处理括号匹配问题中的应用。
1893

被折叠的 条评论
为什么被折叠?



