当前位置: 代码迷 >> 综合 >> LeetCode 32 Longest Valid Parentheses
  详细解决方案

LeetCode 32 Longest Valid Parentheses

热度:84   发布时间:2023-10-28 04:32:42.0

思路

用stack存左括号和没匹配上的右括号的索引。
遇到左括号:直接入栈。
遇到右括号:(1)若栈为空,则直接入栈
(2)若栈不为空:看栈顶元素是否为左括号,若为左括号,则pop并且max = i-peek();【其中若弹栈后栈空了,则i-(-1)】

复杂度

时间复杂度O(n), 空间复杂度O(n)

代码

class Solution {
    public int longestValidParentheses(String s) {
    if(s == null || s.length() == 0)return 0;// use a stack to track the index of all unmatched parenthesesStack<Integer> stack = new Stack<>();int max = 0;for(int i = 0; i < s.length(); i++) {
    if(s.charAt(i) == '(') {
    stack.push(i);} else {
    // s.charAt(i) == ')'if(stack.isEmpty()) {
    stack.push(i);} else {
    // not emptyif(s.charAt(stack.peek()) == '(') {
    stack.pop();int indexTop = stack.isEmpty() ? -1 : stack.peek();max = Math.max(max, i - indexTop);} else {
    stack.push(i);}}}}return max;}
}
  相关解决方案