栈。让栈中保存最后一个没有被匹配的右括号的下标,当遇到左括号时,将左括号的下标入栈,当遇到右括号时,弹出栈顶元素表示「最后一个没有被匹配的右括号的下标」,如果栈不为空,当前右括号的下标减去栈顶元素即为「以该右括号为结尾的最长有效括号的长度」。

class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return int整型
     */
    int longestValidParentheses(string s) {
        int max_count=0;
        stack<int> stk{};
        stk.push(-1);
        for(int i=0;i<s.length();i++){
            if(s[i]=='(') stk.push(i);
            else{
                stk.pop();
                if(stk.empty()) stk.push(i);
                else max_count=i-stk.top()>max_count?i-stk.top():max_count;
            }
        }
        return max_count;
    }
};