leetcode 20. Valid Parentheses
误区,没有思考可能出现的情况直接动手写,果然错的很多,所有的坑都踩了一遍T.T,一定要记住教训。。。
题目中要求,就近配对出现,可知不正确的情况有:
- 奇数个括号一定错误,eg.”(”
- 先出现右括号 ‘)’,’}’,’]’,eg.”){”
- 顺序不正确,eg.”([)]”
思考后明确使用栈的思路最为简便,遇到左括号入栈,遇到对应的右括号弹栈,否则返回错误,最后栈为空则为正确。
代码如下
//不判断奇偶个数如下:(先判断一下效率更高)
public boolean isValid(String s) {
Stack<Character> sta = new Stack<Character>();
for(int i = 0;i<s.length();i++){
switch(s.charAt(i)){
case '(':
case '{':
case '[':
sta.push(s.charAt(i));break;
case ')':
if(!sta.isEmpty()&&sta.peek()=='(' ) {sta.pop();break;}
else return false;
case ']':
if( !sta.isEmpty()&&sta.peek()=='[') {sta.pop();break;}
else return false;
case '}':
if( !sta.isEmpty()&&sta.peek()=='{') {sta.pop();break;}
else return false;
}
}
return sta.isEmpty();
}