class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return int整型
     */
    int longestValidParentheses(string s) {
        // write code here
        stack<int> st;
        st.push(-1);
        
        int res = 0, cur = 0;
        while(cur < s.length()){
            if(s[cur] == '('){
                st.push(cur);
                cur++;
            }
            else{
                if(st.top() < 0 || s[st.top()] != '('){
                    st.push(cur);
                    cur++;
                    continue;
                }
                else{
                    st.pop();
                    res = max(res, cur-st.top());
                    cur++;
                }
            }
        }
        //res = max(res, cur-st.top()+1);
        return res;
    }
};