使用栈来存储索引,栈顶存储的是最后一个被匹配的‘(’前面的索引,所以得到的结果就是当前的索引(‘)’)减去栈顶的索引,求最大值。为了初始化,避免第一个是‘)’造成异常,初始化栈顶为-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; } }