给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
输入: ")()())
" 输出: 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;
}