题目:
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.
戴神版:
int longestValidParentheses(string s)
{
int max_len= 0,last=-1;
stack<int> l;
for (int i=0;i<s.size();i++)
{
if (s[i]=='(')
{
l.push(i);
}
else
{
if (l.empty())
{
last=i; //?
}
else
{
l.pop();
if (l.empty())
{
max_len=max(max_len,i-last);
}
else
{
max_len=max(max_len,i-l.top());
}
}
}
}
return max_len;
}
我的思路:
1、用栈保存字符串中左括号的下标。
2、用数组保存字符串中字符是否合法的的下标。
3、统计连续合法的个数。
代码:
int longestValidParentheses(string s)
{
int max_len= 0,count=0;
stack<int> l;
vector<bool> p(s.size());
for (int i=0;i<s.size();i++)
{
if (s[i]=='(')
{
l.push(i);
}
else if(!l.empty())
{
p[l.top()]=true;
p[i]=true;
l.pop();
}
}
for (int i=0;i!=p.size();i++)
{
if (p[i])
{
count++;
}
else
{
max_len=max(max_len,count);
count=0;
}
}
max_len=max(max_len,count);
return max_len;
}