给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: “(()” 输出: 2
解释: 最长有效括号子串为 “()”
示例 2:
输入: “)()())” 输出: 4
解释: 最长有效括号子串为 “()()”
示例 3:
输入: “)(()))” 输出: 4
解释: 最长有效括号子串为 “(())”
class Solution {
public:
int longestValidParentheses(string s) {
int maxLen = -1;
stack<int> sta; //利用栈存储左括号的位置及最近的右括号位置
sta.push(-1); //最开始插入-1是为了针对"()"这种情况
for(int i = 0; i < s.length(); i++)
{
if(s[i] == '(')
{
sta.push(i); //左括号入栈
}
else
{
sta.pop(); //先出栈
if(sta.empty()) //为空,说明右括号未匹配到,入栈更新有效括号串前一个位置的索引
{
sta.push(i);
}
else
{
maxLen = max(maxLen, i-sta.top()); //计算最大子串
}
}
}
return maxLen;
}
};