Valid Parentheses
2017-03-04 本文已影响5人
DrunkPian0
3.16看覃超的直播,他直接用了Java 的Stack 没有用LinkedList模拟stack
这题看起来简单,但它的条件:
"()" and "()[]{}" are all valid but "(]" and "([)]" are not.
不够充足,它还需要满足:([])这种是正确的,也就是数学公式里的那种。我一开始以为不能这么包含,出现一个,下一个必须就是前一个的配对,于是直接检查了奇数偶数项是否配对;这样是不对的。
正确的做法是要维护一个栈,独到一个符号的时候看栈顶那个元素是不是跟它配对。栈对应的数据结构是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();
}