算法分析: 最长有效括号的长度

提名来自庞果网:http://hero.pongo.cn/home/index



题目详情

给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。


举几个例子如下:

  1. 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。 
  2. 再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。 
  3. 再比如对于"( () () )",它的长度为6。     

    换言之,便是有效双括号"()"数的两倍。

给定函数原型int longestValidParentheses(string s),请完成此函数,实现上述功能。


这个题目比较简单,一次遍历即可解决,我们用一个栈来保存中间数据,

一个int max保存最大长度, int cur保存当前长度,碰到 '('即放入栈中,

碰到')',则从栈中pop一个数据出来,栈不为空则将cur+2,为空则碰到无效字符,

需要重新计算。


因为只需要判断栈中元素个数,所以下面代码用一个int来代替

int longestValidParentheses(string s)  
{
	int max = 0, cur = 0;
	int stack = 0;

	int i = 0;
    while (i < s.length())  
    {
        if (s.at(i) == '(')  
        {    
			stack++;            		
        }  
        else if(s.at(i) == ')')
        {
			if (stack == 0 && cur > max)
			{				
				max = cur;
				cur = 0;			
			}
			else
			{				
				cur += 2;				
				stack--;
			}
        }  

        i++;  
    }
    
	if (cur > max) max = cur;
    return max;  
}



太长时间没有纸上写代码了, 这个提交的时候又把 cur = 0;这句给漏了。。。郁闷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值