题解 | #括号字符串的最长有效长度#

括号字符串的最长有效长度

http://www.nowcoder.com/practice/335acafb6d5141b7873c4b0f24d53c57

//经典动态规划
//申请一个同样长度的dp表
//dp[i]的含义为以i为结尾的最长有效长度是多少
#include<bits/stdc++.h>
using namespace std;
int main(){
    string str;
    cin>>str;
    int len=-1;
    int *dp=new int[str.size()-1];
    dp[0]=0;
    for(int i=1;i<str.size();i++){
        if(str[i]=='('){//以(结尾的长度必定为0
            dp[i]=0;
        }
        else{//如果dp[i]=')'
            if(str[i-1]=='('){//此时正好能凑出来一对括号
                dp[i]+=2;
                dp[i]+=i-2>=0?dp[i-2]:0;
                len=len>dp[i]?len:dp[i];
            }
            else{//此时说明str[i-1]==')'
                if(i-dp[i-1]-1>=0){
                    if(str[i-dp[i-1]-1]=='('){
                        dp[i]=dp[i]+2+dp[i-1];
                        dp[i]+=i-dp[i-1]-2>=0?dp[i-dp[i-1]-2]:0;
                        len=dp[i]>len?dp[i]:len;
                    }
                }
            }
        }
    }
    cout<<len<<endl;
    return 0;
}
全部评论

相关推荐

无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务