给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public int longestValidParentheses(String s) {
Stack<Integer> stack=new Stack();
Stack<String> stringStack=new Stack<>();
for (int i=0;i<s.length();i++){
if(stack.size()==0){
stack.push(i);
stringStack.push(s.substring(i,i+1));
}else {
if(s.substring(i,i+1).equals(")")&&stringStack.peek().equals("(")){
stringStack.pop();
stack.pop();
}else {
stringStack.push(s.substring(i,i+1));
stack.push(i);
}
}
}
int max=0;
if(stack.size()==0){
return s.length();
}else if(stack.peek()!=s.length()-1){
stack.push(s.length());
}else {
stack.push(s.length()-1);
}
if(stack.size()==1){
return s.length();
}else {
while (stack.size()!=1){
int temp=stack.pop()-stack.peek()-1;
if(temp>max){
max=temp;
}
}
}
if(stack.size()==1){
int temp=stack.pop();
if(temp>max){
max=temp;
}
}
return max;
}
}