32. 最长有效括号

190 阅读1分钟
  1. 最长有效括号

给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

leetcode-cn.com/problems/lo…

class Solution {
public:
    int longestValidParentheses(string s) {
        // 堆栈 数组 链表 队列
        // 用栈
        stack<int> stk;
        int maxans = 0;
        // 初始值 不匹配位置-1
        stk.push(-1);
        for(int i = 0; i < s.size(); ++i) {
            if (s[i] == '(') {
                stk.push(i);
            } else if (s[i] == ')') {
                stk.pop();
                if (!stk.empty()) {
                    int length = i - stk.top();
                    maxans = max(maxans, length);
                } else {
                    // 作为初始值 覆盖被弹出位置,记录last不匹配位置
                    stk.push(i);
                }
            }
        }
        return maxans;
    }
};

// 需要判断length是否连续计数
// (()((())
// (()((()))
// (()((())))
// (((()