给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())
" 输出: 4 解释: 最长有效括号子串为"()()"
括号匹配是标准的栈的用法,但是这题求最长的子串,所以用一个单独的数组处理一下所有匹配好的括号,然后扫一遍记录结果就好。
class Solution {
public:
int longestValidParentheses(string s) {
stack<int> ss;
vector<int> arr;
for (int i = 0; i < s.length(); ++i)
{
arr.push_back(0);
if (s[i] == '(')
{
ss.push(i);
}
else
{
if (!ss.empty())
{
int idx = ss.top();
ss.pop();
arr[idx] = 1;
arr[i] = 1;
}
}
}
int t_ans = 0;
int ans = 0;
for (int i = 0; i < s.length(); ++i)
{
if (arr[i])
{
++t_ans;
}
else
{
t_ans = 0;
}
ans = max(ans, t_ans);
}
return ans;
}
};