最长有效括号
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度
1. 栈操作
对于括号,要知道括号的类型以及位置,类似单调栈的删除操作,找消除后最左边位置
这里直接用正负号整数同时表示类型和位置
class Solution {
public:
int longestValidParentheses(string s) {
//消消乐,每次消除的时候计算当前长度,有点类似单调栈
int res = 0;
stack<int> st;//存储括号的位置用于计算
st.push(0);//用于为空的时候计算
for(int i=0;i<s.size();i++){
if(s[i]=='(') st.push(-(i+1));//坐标入栈
else{
if(st.top()<0){
st.pop();//消除
res = max(res,i+1-abs(st.top()));
}
else st.push(i+1);
}
}
return res;
}
};