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.
自己没写对,看的网上的资料:
这道题时间限制在O(n),用一个 stack 实现括号配对+统计, 为了方便实现,写成数组的形式。
对不同深度的括号配对统计个数,一层配对成功把该层统计结果加给上一层,这一层清空
class Solution {
public:
int longestValidParentheses(string s) {
int ans = 0;
std::vector<int> count(1, 0);
for (int i = 0; i < s.size(); i++)
{
if (s[i] == '(')
{
count.push_back(0);
}
else
{
if (count.size() > 1)
{
count[count.size() - 2] += *count.rbegin() + 2;
count.pop_back();
ans = ans > *count.rbegin() ? ans : *count.rbegin();
}
else
{
count[0] = 0;
}
}
}
return ans;
}
};