上機(jī)筆試,掛佣耐。
三個(gè)月不刷題,腦殼都懵了唧龄。
題目:
判斷最長有效字符的長度兼砖,不能包含其他字符。
不要后面那個(gè)條件就和leetcode上的題是一樣的既棺,我理解錯(cuò)題了:()()((())) 和 ((()))()()應(yīng)該返回10讽挟,我覺得返回6,雖然分別成對丸冕,但是是兩種形式耽梅,應(yīng)該區(qū)別開,實(shí)際上不用啊胖烛,所以我最后通過了60%的用例眼姐。
所以用棧诅迷,先入棧個(gè)-1,是為了方便計(jì)算众旗。遇到左括號入棧罢杉,遇到右括號出棧,記錄最長長度贡歧;遇到其他字符則將棧清空滩租,記錄當(dāng)前位置。
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);
}
}
}