zoukankan      html  css  js  c++  java
  • [day005]32. 最长有效括号

    32. 最长有效括号

    Difficulty: 困难

    给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。

    示例 1:

    输入: "(()"
    输出: 2
    解释: 最长有效括号子串为 "()"
    

    示例 2:

    输入: ")()())"
    输出: 4
    解释: 最长有效括号子串为 "()()"
    

    Solution 1 栈

    ​class Solution {
    public:
        int longestValidParentheses(string s) {
            stack<int> st;st.push(-1);
            int length = s.length(),maxLength = 0;
            for(int i = 0;i<length;++i){
                if(s[i] == '('){
                    st.push(i);
                } else {
                    int cur = st.top();
                    st.pop();
                    if(st.empty()){
                        //if index of -1 pops,then this is the last invalid position of right
                        //parentheres
                        st.push(i);
                    } else {
                        maxLength = max(maxLength,i-st.top());
                        //at least there is an index -1 if it's valid
                    }
                }
            }
            return maxLength;
        }
    };
    

    思路

    • 对于这类括号匹配这种情况,基本上第一想法都是栈,左括号进栈,右括号出栈。
    • 栈底维护了当前最右不匹配右括号下标,如果能排空栈,则说明当前这个右括号即为最右不匹配右括号,把下标入栈,如果不能排空,则说明能匹配上,更新最大匹配括号的子串的长度即可
    • 可以假设最左边有一个),使得一开始只有(的入栈的情况得以统一,即先把最右不匹配右括号下标为-1入栈。
  • 相关阅读:
    intel cpu 架构
    nginx-nagios-pnp4nagios-nrpe安装配置过程
    iostat 命令detail
    nagios环境
    编译安装PHP 5.3.13
    nagios支持PNP图形显示
    nagios配置安装
    在xp下禁用media sense
    linux awk常用命令【转载】
    sed命令解析[转载]
  • 原文地址:https://www.cnblogs.com/Swetchine/p/13236464.html
Copyright © 2011-2022 走看看