栈。让栈中保存最后一个没有被匹配的右括号的下标,当遇到左括号时,将左括号的下标入栈,当遇到右括号时,弹出栈顶元素表示「最后一个没有被匹配的右括号的下标」,如果栈不为空,当前右括号的下标减去栈顶元素即为「以该右括号为结尾的最长有效括号的长度」。
class Solution {
public:
/**
*
* @param s string字符串
* @return int整型
*/
int longestValidParentheses(string s) {
int max_count=0;
stack<int> stk{};
stk.push(-1);
for(int i=0;i<s.length();i++){
if(s[i]=='(') stk.push(i);
else{
stk.pop();
if(stk.empty()) stk.push(i);
else max_count=i-stk.top()>max_count?i-stk.top():max_count;
}
}
return max_count;
}
};