[LeetCode]Longest Valid Parentheses

No.32 Longest Valid Parentheses

题目给出(和)组成的字符串,给出合法的最长的长度(即不违反()配对规则)。

这道题的解法为,从头到尾滤一遍,用栈的方式,先把配对情况整体给一遍,因为用栈的方式,一定会让配对的括号被标记出来,配对为1,不配对为0,最后找最长的连续1的个数。比如)()())标记出来是011110,那么连续的1为4个,最长的合法序列长度为4。

((()))这种配对情况就是111111,最后返回6。

栈中存储的是左括号的index,遇到右括号就弹栈,把弹出的左括号位置的标记和该右括号的标记都改为1。

class Solution {
public:
    int longestValidParentheses(string s) {
        bool *flag=new bool[s.size()];
        memset(flag,false,s.size());
        stack<int> st;
        for(int i=0;i<s.size();i++){
            if(s[i]=='('){
                st.push(i);
            }
            else{
                if(!st.empty()){
                    flag[i]=true;
                    flag[st.top()]=true;
                    st.pop();
                }
            }
        }
        int max_num=0;
        int cur_num=0;
        for(int i=0;i<s.size();i++){
            if(flag[i]==1){
                cur_num++;
            }
            else{
                if(cur_num>max_num)
                    max_num=cur_num;
                cur_num=0;
            }
        }
        if(cur_num>max_num)
            max_num=cur_num;
        return max_num;
    }
};
原文地址:https://www.cnblogs.com/lilylee/p/5418519.html