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 maxLen = 0, last = -1;
int len = s.length();
stack<int> stack;
for(int i=0;i<len;i++)
{
if(s[i] == '(')
{
stack.push(i);
}
else
{
if(stack.empty())
{
last = i;
continue;
}
stack.pop();
if(stack.empty())
{
//last is the first ')' without matching
maxLen = max(maxLen, i-last);
}
else
{
//the top of stack is the first '(' without match
maxLen = max(maxLen, i-stack.top());
}
}
}
return maxLen;
}
};