# 最长有效括号

给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

 

示例 1:

输入:s = "(()"
输出:
2
解释:
最长有效括号子串是 "()"

示例 2:

输入:s = ")()())"
输出:
4
解释:
最长有效括号子串是 "()()"

示例 3:

输入:s = ""
输出:
0

 

提示:

以下程序实现了这一功能,请你填补空白处的内容: ```cpp #include using namespace std; class Solution { public: int longestValidParentheses(string s) { stack stk; int invalid = -1; int len = 0, max_len = 0; for (int i = 0; i < s.length(); i++) { if (s[i] == '(') { stk.push(i); } else { if (stk.empty()) { invalid = i; } else { stk.pop(); ___________________; } } } return max_len; } }; ``` ## template ```cpp #include using namespace std; class Solution { public: int longestValidParentheses(string s) { stack stk; int invalid = -1; int len = 0, max_len = 0; for (int i = 0; i < s.length(); i++) { if (s[i] == '(') { stk.push(i); } else { if (stk.empty()) { invalid = i; } else { stk.pop(); if (stk.empty()) { max_len = max(i - invalid, max_len); } else { max_len = max(i - stk.top(), max_len); } } } } return max_len; } }; ``` ## 答案 ```cpp if (stk.empty()) { max_len = max(i - invalid, max_len); } else { max_len = max(i - stk.top(), max_len); } ``` ## 选项 ### A ```cpp if (stk.empty()) { max_len = max(i - invalid, max_len); } else { max_len = max(stk.top(), max_len); } ``` ### B ```cpp if (stk.empty()) { max_len = max(invalid, max_len); } else { max_len = max(i - stk.top(), max_len); } ``` ### C ```cpp if (stk.empty()) { max_len = max(invalid - i, max_len); } else { max_len = max(i - stk.top(), max_len); } ```