使用栈来存储索引,栈顶存储的是最后一个被匹配的‘(’前面的索引,所以得到的结果就是当前的索引(‘)’)减去栈顶的索引,求最大值。为了初始化,避免第一个是‘)’造成异常,初始化栈顶为-1
import java.util.*;
public class Solution {
/**
*
* @param s string字符串
* @return int整型
*/
int max=0;
public int longestValidParentheses (String s) {
// write code here
int n=s.length();
if(n<=1){
return 0;
}
char []c=s.toCharArray();
Deque<Integer> stack=new LinkedList<>();
stack.push(-1);
for(int i=0;i<n;i++){
if(c[i]=='('){
stack.push(i); //push的是坐标
}
else{
stack.pop();
if(stack.isEmpty()){
stack.push(i); //表示能匹配的左括号前面的那个元素
}
else{
max=Math.max(max,i-stack.peek()); //stack 保存的是最后一个被匹配的’(‘的前面的索引 }
}
}
}
return max;
}
}

京公网安备 11010502036488号