题目描述
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.
解析:利用栈进行匹配,详情见代码注解
public static boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
Character temp;
for(int i=0;i<s.length();i++){
temp=s.charAt(i);
if(temp=='('||temp=='['||temp=='{'){//当前字符是左括号,入栈
stack.push(temp);
}else {
if(stack.isEmpty()){//当前括号是右括号,栈空说明没有左括号
return false;
}
Character top=stack.peek();//取栈顶元素
if(temp==')'){//需要判断当前元素与栈顶元素的匹配情况,例如:"([)]" 返回:false
if(top=='('){
stack.pop();
}
}
else if(temp==']'){
if(top=='['){
stack.pop();
}
}else {
stack.pop();
}
}
}
return stack.isEmpty();//栈空则说明全部匹配了
}