给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
挺难的一道题,我想到了动态规划,想到了栈,但是一个都没有做出来。。有太多的点需要注意了,栈还是比较好理解的。
初始化一个栈,遇到做括号就将下标入栈,遇到右括号就弹栈。 如果弹栈之后栈为空,就将当前下表入栈。 如果弹栈之后下表不为空,更新结果。 注意要在最开始入栈一个 -1,比如“ () ”,没有入栈一个-1的话,结果就是0。
public static int longestValidParentheses(String s) { int max = Integer.MIN_VALUE; Stack<Integer> stack = new Stack<Integer>(); stack.push(-1); for (int i = 0; i < s.length(); i++) { if(s.charAt(i) == '('){ // 左括号 stack.push(i); } else { // 右括号 stack.pop(); if (stack.empty()) { stack.push(i); // 弹栈后为空,则将当前下标入栈 } else { max = Math.max(max, i - stack.peek()); // 弹栈后不为空,更新结果 } } } return max; }没啥好说的,难
