题目描述:
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
思路:
题目意思不要理解错哦,刚开始的时候我就理解出错了。这题的意思是求出有效括号的最长子串的长度,子串一定是连续的。而不是整个字符串中有效括号的对数*2。
通过答案:
class Solution {
public int longestValidParentheses(String s) {
Stack<Integer> stack=new Stack(); //创建一个栈
stack.push(-1); //初始化,先压入一个-1
int maxs=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='('){ //若为左括号则入栈
stack.push(i);
}else{
stack.pop(); //若为右括号则出栈
if(stack.empty()){ //若此时栈为空,则压入下一个括号
stack.push(i);
}else{
maxs=Math.max(maxs,i-stack.peek()); //记录最大长度
}
}
}
return maxs;
}
}