• [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;
        }
    };
  • 相关阅读:
    vim 真是上瘾啊
    乐此不疲
    .vimrc .bashrc
    github
    隐藏c语言烦人的{ }
    linux mint console-setup
    samsung n143 brightness on linux mint
    荒漠甘泉——1月31日
    嵌入式 方向?
    python2与python3的区别
  • 原文地址:https://www.cnblogs.com/lilylee/p/5418519.html
Copyright © 2020-2023  润新知