版权声明: https://blog.csdn.net/Dorothy_Xue/article/details/84329269
题目描述:
给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())
" 输出: 4 解释: 最长有效括号子串为"()()"
方法:
class Solution {
public:
int longestValidParentheses(string s) {
stack<int> sta;
int max=0;
for(int i=0;i<s.size();i++){
if(s[i]==')'&&sta.size()!=0&&s[sta.top()]=='('){
sta.pop();
if(sta.size()==0) max=i+1;
else if(i-sta.top()>max) max=i-sta.top();//记录最长子串长度
}
else sta.push(i);
}
return max;
}
};
思路:
遍历字符串,若在堆栈非空时,栈顶元素为“(”并且当前元素为“)”,则该括号为有效括号。
在上述情况下,弹出栈顶元素,若弹出后,栈为空,则最大值为当前下标+1;当当前元素下标减去 栈顶元素下标大于最大长度时,则该长度为最大长度。除去上述情况,其他情况都将当前元素下标入栈。