32. 最长有效括号
class Solution {
public:
int longestValidParentheses(string s)
{
int maxans = 0;
vector<int> dp(s.size());
if (s.size() < 2)
{
return 0;
}
if (s[0] == '(' && s[1] == ')')
{
dp[1] = 2;
maxans = 2;
}
for (int i = 2; i < s.size(); i++)
{
if (s[i] == ')')
{
if (s[i - 1] == '(')
dp[i] = dp[i - 2] + 2;
else if (s[i - 1] == ')')
{
//越界
if (i - dp[i - 1] - 1 < 0)
{
dp[i] = 0;
}
else
{
if (s[i - dp[i - 1] - 1] == '(')
if (i - dp[i - 1] - 2 > 0) dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2];
else dp[i] = dp[i - 1] + 2;
else dp[i] = 0;
}
}
}
maxans = max(maxans,dp[i]);
}
return maxans;
}
};