码迷,mamicode.com
首页 > 其他好文 > 详细

Longest Valid Parentheses

时间:2015-07-03 00:20:43      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:string   leetcode   longest valid parent   

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;
    }


版权声明:本文为博主原创文章,未经博主允许不得转载。

Longest Valid Parentheses

标签:string   leetcode   longest valid parent   

原文地址:http://blog.csdn.net/jisuanji_wjfioj/article/details/46731079

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!