3.16看覃超的直播,他直接用了Java 的Stack 沒有用LinkedList模擬stack
這題看起來簡單,但它的條件:
"()" and "()[]{}" are all valid but "(]" and "([)]" are not.
不夠充足,它還需要滿足:([])這種是正確的,也就是數(shù)學公式里的那種。我一開始以為不能這么包含,出現(xiàn)一個,下一個必須就是前一個的配對,于是直接檢查了奇數(shù)偶數(shù)項是否配對;這樣是不對的。
正確的做法是要維護一個棧,獨到一個符號的時候看棧頂那個元素是不是跟它配對。棧對應的數(shù)據(jù)結構是LinkedList。
已犯錯誤:
if (stack.isEmpty() || !stack.pop().equals("(")) return false;
沒有判空。另外,pop是跟push一對的,offer和add是不能往棧里加東西的。
- 最后沒有判斷棧是否為空,而是判斷是否是len%2 == 0.
public boolean isValid(String s) {
int len = s.length();
LinkedList<String> stack = new LinkedList<>();
for (int i = 0; i < len; i++) {
switch (String.valueOf(s.charAt(i))) {
case "(":
stack.push("(");
break;
case "{":
stack.push("{");
break;
case "[":
stack.push("[");
break;
case ")":
if (stack.isEmpty() || !stack.pop().equals("(")) return false;
break;
case "}":
if (stack.isEmpty() || !stack.pop().equals("{")) return false;
break;
case "]":
if (stack.isEmpty() || !stack.pop().equals("[")) return false;
break;
}
}
return stack.isEmpty();
}