class Solution {
public:
int longestValidParentheses(string s) {
int n=s.size();
int cnt = 0;
int max = 0;
vector<int> st;
string strip(n, ' ');
int i = 0;
for (auto c:s) {
if (c == '(') {
st.push_back(i);
}
else {
if(!st.empty()) {
auto left = st.back();
st.pop_back();
strip[i] = ')';
strip[left] = '(';
}
}
i++;
}
for (auto c:strip) {
if (c != ' ') {
cnt++;
}
else {
max = max<cnt ? cnt : max;
cnt = 0;
}
}
if (cnt) max = max<cnt ? cnt : max;
return max;
}
};
就输出所有合法的括号匹配,用同样长度字符串来存放,不合法位置默认用空格,
这样从前往后找最长的一串就是最大长度