• 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.

    解:

    使用动态规划。直接记录每一个位置的括号能否够跟前面的括号匹配,假设匹配,则记录为true

    这里使用栈实现括号的匹配


    int longestValidParentheses(string s) {
            int longestLen=0;
            if(s.size()<2)
                return 0;
            stack<int> st;
            vector<bool> dp;
            dp.resize(s.size(), false);
            
            for(int i=0; i<s.size(); i++){//实现动态规划
                if(s[i]=='('){
                    st.push(i);
                }
                else if(st.size()){
                    if(s[st.top()]=='('){
                        dp[st.top()]=true;
                        dp[i]=true;
                    }
                    st.pop();
                }
            }
            
            int localLong=0;
            int j;
            for(j=0; j<s.size(); j++){//计算最长匹配括号的长度
                if(dp[j]){
                    localLong++;
                    if(localLong>longestLen){
                        longestLen=localLong;
                    }
                }
                else{
                    localLong=0;
                }
            }
            
            if(longestLen%2==0)
                return longestLen;
            else
                return longestLen-1;
        }


  • 相关阅读:
    js日期 操作
    c# 调用c++ dll
    多维数组与交错数组的转换
    c++多态
    c++ 指向类成员函数的函数指针
    c++虚析构函数的使用及其注意点
    c++模板实现 linq
    Php 常用类
    Php ORM 对象关系映射
    Php OpenID
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6856881.html
Copyright © 2020-2023  润新知