Leetcode 32. Longest Valid Parentheses (Hard) (cpp)
Tag: Dynamic Programming, String
Difficulty: Hard
/*
32. Longest Valid Parentheses (Hard)
Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.
For "(()", the longest valid parentheses substring is "()", which has length = 2.
Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.
*/
class Solution {
public:
int longestValidParentheses(string s) {
vector<bool> t(s.size(), false);
stack<int> sta;
for (int i = 0; i < s.length(); ++i) {
if (s[i] == '(') {
sta.push(i);
}
else if (s[i] == ')' && !sta.empty()) {
t[i] = true;
t[sta.top()] = true;
sta.pop();
}
}
int max_len = 0, cur_len = 0;
for (int i = 0; i < s.size(); i++) {
if (t[i] == true) {
cur_len++;
}
else {
cur_len = 0;
}
max_len = max(max_len, cur_len);
}
return max_len;
}
};