栈中只保存左括号的下标,每遍历到右括号就出栈,比较当前最大合法长度。
class Solution {
public:
int longestValidParentheses(string s) {
int maxLen = 0;
stack<int> stk;
stk.push(-1); //栈中需要一个元素垫底
for (int i = 0; i < s.size(); i ++ )
{
if (s[i] == '(') stk.push(i); //只让左括号的下标进栈
else
{
stk.pop();
if (stk.empty()) stk.push(i);
else maxLen = max(maxLen, i - stk.top());
}
}
return maxLen;
}
};