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) {
vector<int> position;
int max = 0;
for(int i = 0; i < s.size(); i++)
{
if(s[i] == '(')
position.push_back(i);
else
{
if(!position.empty() && s[position.back()] == '(')
{
position.pop_back();
max = std::max(max, position.empty()? i+1 : i - position.back() );
}
else
position.push_back(i);
}
}
return max;
}
};
Round 2:
class Solution {
public:
int longestValidParentheses(string s) {
stack<int> pos;
int count = 0;
for(int i = 0; i < s.size(); i++)
{
if(s[i] == '(')
pos.push(i);
else
{
if(pos.empty() || s[pos.top()] == ')')
pos.push(i);
else
{
pos.pop();
int cur = 0;
if(pos.empty())
{
cur = i+1;
}
else
{
cur = i-pos.top();
}
if(cur > count)
count = cur;
}
}
}
return count;
}
};