提名来自庞果网:http://hero.pongo.cn/home/index
题目详情
给定只包含括号字符'(‘和 ‘)”的字符串,请找出最长的有效括号内子括号的长度。
举几个例子如下:
- 例如对于”( ()”,最长的有效的括号中的子字符串是”()” ,有效双括号数1个,故它的长度为 2。
- 再比如对于字符串”) () () )”,其中最长的有效的括号中的子字符串是”() ()”,有效双括号数2个,故它的长度为4。
- 再比如对于”( () () )”,它的长度为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;这句给漏了。。。郁闷