题意:
        给出一个长度为 n 的,仅包含字符 '(' 和 ')' 的字符串,计算最长的格式正确的括号子串的长度。

方法:

思路:
        首先,初始化一个存储左括号下标的栈;
        然后,遍历字符串:
                    如果是左括号,则左括号下标入栈;
                    如果是右括号,则判断:1.栈空,则更新last值;2.栈非空,则计算并维护最大值。

        

class Solution {
public:
    
    int longestValidParentheses(string s) {
        int len=s.size();
        stack<int> st;//栈存储左括号的下标
        int res=0,last=-1;
        for(int i=0;i<len;i++){//遍历字符串
            if(s[i]=='('){//左括号下标入栈
                st.push(i);
            }else{//如果是右括号,则判断:1.栈空,则更新last值;2.栈非空,则计算并维护最大值
                if(st.empty()){
                    last=i;
                }else{
                    st.pop();
                    res=max(res,st.empty()?i-last:i-st.top());//维护最大值
                }
            }
        }
        return res;
    }
};



时间复杂度:
空间复杂度: