最长有效括号

发布时间 2023-05-04 23:00:11作者: 失控D大白兔

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

1. 栈操作

对于括号,要知道括号的类型以及位置,类似单调栈的删除操作,找消除后最左边位置
这里直接用正负号整数同时表示类型和位置

class Solution {
public:
    int longestValidParentheses(string s) {
        //消消乐,每次消除的时候计算当前长度,有点类似单调栈
        int res = 0;
        stack<int> st;//存储括号的位置用于计算
        st.push(0);//用于为空的时候计算
        for(int i=0;i<s.size();i++){
            if(s[i]=='(') st.push(-(i+1));//坐标入栈
            else{
                if(st.top()<0){ 
                    st.pop();//消除
                    res = max(res,i+1-abs(st.top()));
                }
                else st.push(i+1);
            }
        }
        return res;
    }
};