以前看到的一个算法题,最近项目中用到,复习一下,还有点生疏了,记下来。
public class CheckBrackets {
public static void main(String[] args) {
String str = "()([{{}}])]";
System.out.println(bracketsValid(str));
}
/**
* 判断单种括号
* @return
*/
public static boolean bracketValid(String str){
char[] brackets = str.toCharArray();
// 待匹配的左括号数量
int left = 0;
for(char c : brackets){
if('(' == c){
left++;
}else {
left--;
}
if(left < 0){
return false;
}
}
return 0 == left;
}
/**
* 判断多种括号
* @return
*/
public static boolean bracketsValid(String str){
Stack left = new Stack<>();
char[] brackets = str.toCharArray();
for(char c : brackets){
// 左括号入栈
if('(' == c || '{' == c || '[' == c){
left.push(c);
}else {
// 右括号和栈顶元素匹配
if(!left.empty() && leftOf(c) == left.peek()){
left.pop();
}else {
return false;
}
}
}
// 所有元素匹配
return left.empty();
}
static char leftOf(char c){
if(')' == c){
return '(';
}
if('}' == c){
return '{';
}
return '[';
}
}