LeetCode 32. Longest Valid Parentheses 时间复杂度(O(n))

1、时间复杂度(O(n^2)),思想,暴力查找

class Solution {
public:
    int longestValidParentheses(string s) {
        int maxLen=0;
        for(int index=0;index< s.size();++index){
            vector<char> vec_ch ;
            int countValid = 0;
            int maxValid = 0;
            int nextSite=index;
            for(int i=index;i<s.length();++i){
                if(vec_ch.empty())    vec_ch.push_back(s.at(i));
                else 
                    if((vec_ch.back()=='{'&&s.at(i)=='}')||(vec_ch.back()=='['&&s.at(i)==']')||(vec_ch.back()=='('&&s.at(i)==')')){
                        if(nextSite>0)    nextSite = -nextSite;
                        countValid+=2;
                        vec_ch.pop_back();
                    }else  vec_ch.push_back(s.at(i));
                if(vec_ch.back()=='}'||vec_ch.back()==']'||vec_ch.back()==')') {
                    vec_ch.pop_back();
                    break;
                }
                if(vec_ch.empty()){
                    maxValid+=countValid;
                    countValid=0;
                }
                if(nextSite>=0)    nextSite=i;    
            }
            if(maxValid>0){
                index+=maxValid-2;
                if(maxLen < maxValid)maxLen = maxValid;
            }else {
                if(nextSite<0)nextSite=-nextSite;        
                nextSite-=countValid;
                nextSite-=index;
                if(nextSite>0)index+=nextSite-1;    
            }
        }
        return maxLen;
    }
};

2、时间复杂度(O(n)) ,思想,动态规划

class Solution {
public:
    int longestValidParentheses(string s) {
        int maxLen=0;
        vector<int> vec_ch;
        for(int i=0;i<s.length();++i){
            if(vec_ch.empty())    vec_ch.push_back(s.at(i));
            else 
                if(s.at(i)==')'){
                    int count =0;
                    if(vec_ch.back()!='('){
                        count += vec_ch.back();
                        vec_ch.pop_back();
                    }
                    if(!vec_ch.empty()){
                        count -= 2;
                        vec_ch.pop_back();
                        while(!vec_ch.empty()&&vec_ch.back()!='('){
                            count += vec_ch.back();
                            vec_ch.pop_back();
                        }
                        vec_ch.push_back(count);
                        if(maxLen>count)maxLen = count;
                    }
                }else  vec_ch.push_back(s.at(i));
            if(vec_ch.back()==')') vec_ch.pop_back();
        }
        return -maxLen;
    }
};

3、时间复杂度(O(n)),思想,动态规划

class Solution {
public:
    int longestValidParentheses(string s) {
        int maxLen=0;
        vector<int> vec_ch;
        vec_ch.push_back(-1);
        for(int i=0;i<s.length();++i)
            if(s.at(i)=='(')vec_ch.push_back(i);
            else{
                vec_ch.pop_back();
                if(vec_ch.empty())    vec_ch.push_back(i);
                else    maxLen = maxLen > i-vec_ch.back() ? maxLen :i-vec_ch.back();
            }
        return maxLen;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值