题目:
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.
思路:
思考这个题目比较容易进入误区。其实我们只需要考虑每个右括号匹配最近的最括号即可。最后找出连续的匹配结果。
代码:
class Solution {
public:
int longestValidParentheses(string s) {
int len = s.size();
if(len<2)
{
return 0;
}
else
{
stack<int> leftPart;
bool* parentheses = new bool[len];
for(int i=0;i<len;i++)
{
parentheses[i] = false;
}
for(int i=0;i<len;i++)
{
if(s[i]=='(')
{
leftPart.push(i);
}
else if(!leftPart.empty())
{
int index = leftPart.top();
leftPart.pop();
parentheses[index] = true;
parentheses[i] = true;
}
}
int max=0;
int count=0;
for(int i=0;i<len;i++)
{
if(parentheses[i])
{
count++;
}
else
{
if(count>max)
{
max=count;
}
count=0;
}
}
if(count>max)
{
max=count;
}
return max;
}
}
};