有一定的难度。用堆栈记录下所有左符的位置,用变量记录下孤立右符的位置。
int longestValidParentheses(const string& s)
{
stack<int>lefts;//将左符对应的位置保留
int last;//记录孤立的右符位置
int max_len = ;//记录当前最长的有效长度
for (int i = ; i < s.size(); i++)
{
if (s[i] == '(')
lefts.push(i);
else
{
if (lefts.empty())
{
last = i;
}
else
{
lefts.pop();
if (lefts.empty())
max_len = max(max_len, i - last);
else
max_len = max(max_len, i - lefts.top());
}
}
} return max_len;
}