题目描述
给定一个字符串(brackets),字符串中只包含 (){}[]六种括号,现需要判断输入的字符串中,括号是否匹配。
输入描述
一个字符串brackets,字符串长度<10^5
输出描述
true或false
示例
示例输入1
({})
示例输出1
true
示例输入2
({)}
示例输出2
false
代码
package com.domcer;
import java.util.Scanner;
/**
* @author hang.wang
*/
public class BracketsAdapt {
private static final Scanner SCANNER = new Scanner(System.in);
public static void main(String[] args) {
String brackets = SCANNER.next();
System.out.println(getBracketsAdaptation(brackets));
// () {} []
// 40 41 123 125 91 93
}
public static boolean getBracketsAdaptation(String brackets) {
// 如果字符串长度为奇数 返回false
if (brackets.length() % 2 != 0) {
return false;
}
// 如果字符串首位是后括号 返回false
if (brackets.charAt(0) == ')' || brackets.charAt(0) == '}' || brackets.charAt(0) == ']') {
return false;
}
// 创建一个char类型的数组,如果遍历字符串的字符是前括号,就存进去
char[] list = new char[brackets.length()];
// size代表char数组的大小,也代表了从哪里存,起到一个index的效果
int size = 0;
for (int i = 0; i < brackets.length(); i++) {
char currentChar = brackets.charAt(i);
if (currentChar == '(' || currentChar == '{' || currentChar == '[') {
list[size] = currentChar;
size++;
} else {
if (size ==0) {
return false;
}
char tempChar;
switch (currentChar) {
case ')':
tempChar = ')'-1;
break;
default:
tempChar = (char) (currentChar-2);
break;
}
if (list[size-1] != tempChar) {
return false;
}
size--;
}
}
return size == 0;
}
}
代码未必是最优解