Longest Valid Parentheses

题目:Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.

For "(()", the longest valid parentheses substring is "()", which has length = 2.

Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.

思路:

本题就是如果是“(”,进入堆栈,如果不是:

看当前栈是否落空,落空就是从头计起,

如果不是记录当前栈顶元素,并且出栈,如果栈为空,表示可以记录一下当前值,加上刚刚的accu值,这是因为可能出现()()的情况,所以加上accu;

如果栈不为空,比如是(()所以就是i-j+1,当然这些都是要与之前的res取最大值。

代码:

class Solution {
public:
    int longestValidParentheses(string s) {
        int res=0,first=0;
        stack<int>stk;
        for(int i=0;i<s.size();i++){
            if(s[i]=='('){
                stk.push(i);//stack 仅仅存放当前“(”的索引值
            }else{
                if(stk.empty()){
                    first=0;
                }else{
                    int j=stk.top();
                    stk.pop();
                    if(stk.empty()){
                        first+=i-j+1;
                        res=max(res,first);
                    }else{
                        res=max(res,i-stk.top());
                    }
                }
            }
        }
        return res;
    }
};


原文地址:https://www.cnblogs.com/jsrgfjz/p/8519830.html