思路
用一个栈来存放加入的左括号的下标;一个起始变量来标明第一个无用的右括号的位置。
然后遍历字符串,如果当前字符串为左括号就将其下标进栈,如果是右括号,就先判断当前栈是否为空。
如果为空,则start=当前下标;
如果不为空:
则将stack的元素弹出
如果弹出后栈为空,则说明是最后一个元素,res = max(res,i-start);
如果弹出后栈不为空,则res= max(res,i-stack.peek());
代码
class Solution {
public int longestValidParentheses(String s) {
Stack<Integer> stack1 = new Stack<>();
int start = -1;
int res = 0;
for(int i = 0;i<s.length();i++){
if(s.charAt(i) == '('){
stack1.push(i);
}else{
if(stack1.isEmpty() != true){
stack1.pop();
if(stack1.isEmpty()){
res = Math.max(res,i-start);
}else{
res = Math.max(res,(i-stack1.peek()));
}
}else{
start = i;
}
}
}
return res;
}
}