最长有效括号
看了参考答案的提示写了一下,然后自己调试bug,发现这里对于一种情况不太行,标注
class Solution {
public:
int longestValidParentheses(string s) {
//最长有效括号使用,包含有效括号怎么办使用动态规划
int len = s.size();
int begin = 0;
int end = 0;
int maxlen = 0;
string result;
vector<int> dp(len, 0);//表示以第几个括号为结尾能达到的数量是多少( ()表示的是什么,一共表示两种形式
for (int i = 1; i<len; ++i)
{
if (s[i] == ')')
{
if (s[i - 1] == '(')//形如()()
{
if (i == 1)
{
dp[i] = 2;
}
else
{
dp[i] = dp[i - 2] + 2;
}
}
else//形如(())
{
if (s[i - 1] == ')'&&i - (dp[i - 1] + 1) >= 0 && s[i - (dp[i - 1] + 1)] == '(')//如果满足的话
{
dp[i] = dp[i - 1] + 2+(i-(dp[i-1]+2)>=0?dp[i-(dp[i-1]+2)]:0);//这里需要判断
}
}
}
if (maxlen<dp[i])
{
maxlen = dp[i];
result=s.substr(i - (dp[i] - 1), dp[i]);
}
}
//cout << maxlen << endl;
//return result;
return maxlen;
}
};