zoukankan      html  css  js  c++  java
  • [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;
        }
    };
  • 相关阅读:
    BZOJ1029_建筑抢修_KEY
    黑匣子_KEY
    食物链_KEY
    滑雪_KEY
    抓猫_KEY
    线段树初步__ZERO__.
    听说alphago又要挑战sc2了?——我眼中的人工智能
    我眼中的算法
    opencv拼接相关1
    Cstring到string
  • 原文地址:https://www.cnblogs.com/lilylee/p/5418519.html
Copyright © 2011-2022 走看看