一,题目
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
二,思路
1,遇到([{入栈
2,每次遇到) [ }判断栈顶是否能与其匹配,如果可以,栈顶出栈,否则返回true
3,遍历完毕如果栈不为空返回false,否则true
三,代码
public boolean isValid(String s) {
if(s == null || s.length() == 0){
return true;
}
int len = s.length();
if(len %2 != 0){
return false;
}
Stack<Character> stack = new Stack<Character>();
for(int i=0; i < len; i++){
char ch = s.charAt(i);
if('(' == ch){
stack.push(ch);
}else if('[' == ch){
stack.push(ch);
}else if('{' == ch){
stack.push(ch);
}else if(')' == ch){
if(stack.size() > 0 && stack.peek() == '('){
stack.pop();
}else{
return false;
}
}else if(']' == ch){
if(stack.size() > 0 && stack.peek() == '['){
stack.pop();
}else{
return false;
}
}else if('}' == ch){
if(stack.size() > 0 && stack.peek() == '{'){
stack.pop();
}else{
return false;
}
}
}
return stack.isEmpty();
}