栈
1.用栈来模拟进栈的操作,先要在栈中进栈-1下标来防止第一个字符为 ),当字符为(时进栈(的下标,当字符为)时先出栈一个元素,在判断栈是否为空,栈为空时,进栈)的下标,不为空时就用i-peek()来计算最长有效括号。
class Solution {
public int longestValidParentheses(String s) {
//接收有效长度
int sum=0;
//当字符串长度小于等于1
if(s.length()<=1){
return 0;
}
//定义栈
Stack<Integer> st=new Stack<>();
//进栈-1来查找连续的括号长度
st.push(-1);
//for循环来遍历字符串进行进栈操作
for(int i=0;i<s.length();i++){
//当值为(时进栈
if(s.charAt(i)=='('){
st.push(i);
}else{//进行出栈操作
st.pop();
//当栈为空时没有匹配的括号,要进栈(
if(st.isEmpty()){
st.push(i);
}else{ //当栈不为空时计算最长有效括号
sum=Math.max(sum,i-st.peek());
}
}
}
return sum;
}
}