上机笔试,挂。
三个月不刷题,脑壳都懵了。
题目:
判断最长有效字符的长度,不能包含其他字符。
不要后面那个条件就和leetcode上的题是一样的,我理解错题了:()()((())) 和 ((()))()()应该返回10,我觉得返回6,虽然分别成对,但是是两种形式,应该区别开,实际上不用啊,所以我最后通过了60%的用例。
所以用栈,先入栈个-1,是为了方便计算。遇到左括号入栈,遇到右括号出栈,记录最长长度;遇到其他字符则将栈清空,记录当前位置。
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
char[] chars = str.toCharArray();
int max = 0;
Stack<Integer> stack = new Stack<>();
stack.push(-1);
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c == '(') {
stack.push(i);
} else if (c == ')'){
stack.pop();
if (stack.empty()) {
stack.push(i);
} else {
max = Math.max(max, i - stack.peek());
}
} else {// 特殊符号
stack.clear();
stack.push(i);
}
}
System.out.println(max);
}
}
}