Given a string containing just the characters '('
and ')'
, find the length of the longest valid (well-formed) parentheses substring.
Example 1:
Input: "(()"
Output: 2
Explanation: The longest valid parentheses substring is "()"
Example 2:
Input: ")()())"
Output: 4
Explanation: The longest valid parentheses substring is "()()"
传送门:32. Longest Valid Parentheses
评论区解答:
遍历括号时把下标放进堆栈中,保证栈顶的值是当前最后不匹配的右括号的下标,每次出栈时当前括号的下标减去栈顶的值就是当前子串的长度。
class Solution {
public:
int longestValidParentheses(string s) {
stack<int> parentheses;
parentheses.push(-1);
int res = 0;
for(int i=0; i<s.length(); ++i) {
if(s[i] == '(')
parentheses.push(i);
else {
parentheses.pop();
if(parentheses.empty())
parentheses.push(i);
else
res = max(res, i - parentheses.top());
}
}
return res;
}
};