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

【栈】Longest Valid Parentheses

时间:2015-04-13 16:44:58      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:c++   程序员   面试      

题目:leetcode

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.


分析:

1、先从左到右扫描。遇到 ‘(‘ 则入栈,反之出栈。每当栈为空时,更新一次返回值res!因为此时已经达到最大值。

2、再从右到左扫描一次。为什么还需要从右到左扫描一次?因为从左到右扫描时结束时,若栈不为空,则有可能还有一部分有效的左右括号没有记录到res中。


 int longestValidParentheses(string s) {
        if(s.size()<2)
        return 0;
       
        int res=0,cur=0;
        stack<char> sa;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='(')
            {
                sa.push(s[i]);
                cur++;
            }
            else
            {
                if(sa.empty())
                {
                    res=max(res,cur);
                    cur=0;
                }
                else
                {
                    sa.pop();
                     cur++;
                    if(sa.empty())
                     res=max(res,cur);
                   
                }
            }
        }
        
        if(sa.empty())
            return res;
            
       while(!sa.empty())
       {
            sa.pop();
       }
       cur=0;

        for(int i=s.size()-1;i>=0;i--)
        {
            if(s[i]==')')
            {
                sa.push(s[i]);
                cur++;
            }
            else
            {
                if(sa.empty())
                {
                    res=max(res,cur);
                    cur=0;
                }
                else
                {
                    sa.pop();
                     cur++;
                    if(sa.empty())
                      res=max(res,cur);
                }
            }
        }
            
        return res;
    }



【栈】Longest Valid Parentheses

标签:c++   程序员   面试      

原文地址:http://blog.csdn.net/bupt8846/article/details/45026389

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