给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
输入: ")()())
" 输出: 4 解释: 最长有效括号子串为"()()"
方法 ( ) )( ( ) ) )
-1 0 1 2 3 4 5 6 7
使用一个栈,栈顶放-1,当作起始位置
代码:
public int longestValidParentheses(String s) { if(s == null || s.length() < 2) return 0; Stack<Integer> stack = new Stack<Integer>(); stack.push(-1); //栈顶默认放-1 int max = 0; int start = 0, len = s.length(); while(start < len){ switch(s.charAt(start)){ case '(': stack.push(start); //压入 break; case ')': int loc = stack.pop(); //弹出 if(!stack.empty()){ max = Math.max(max, start-stack.peek()); }else{ stack.push(start); //空了代表 )比( 多,重新设置起始位置 } break; default: break; } start++; } return max; }