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 max = 0;
int ii = 0;
while(ii < s.length()) {
int jj = ii;
int count = 0;
int mark = 0;
vector<int> flags;
while(jj < s.length()) {
if(s[jj] == '(') {
flags.push_back(jj);
count ++;
}
else if(count > 0) {
count --;
flags.pop_back();
mark +=2;
}
else {
jj ++;
break;
}
jj ++;
}
if (!flags.empty())
{
mark = flags[0] - ii;
for (int kk = 0; kk < flags.size() - 1; kk ++)
{
int newmark = flags[kk + 1] - flags[kk] - 1;
if(newmark > mark)
mark = newmark;
}
ii = flags[flags.size() - 1] + 1;
}
else {
ii = jj;
}
if(mark > max) {
max = mark;
}
}
return max;
}
};