[英]find if the brackets are properly nested/aligned JAVA
我想知道這種方法是否可行,或者是否有更好的結構來查找方括號是否正確嵌套/對齊。 我擔心的是由於isMatrixZero()方法增加了復雜性。
public static boolean areBracketsCurlyParenthesisAligned(String input){
int numOpen = countOpens(input);
int[][] symbols = new int[numOpen][3];
for (int i=0; i < input.length(); i++){
int j=0; // level 0
switch (input.charAt(i)){
case '[':
symbols[j][0]++;
j++;
break;
case ']':
j--;
symbols[j][0]--;
break;
case '{':
symbols[j][1]++;
j++;
break;
case '}':
j--;
symbols[j][1]--;
break;
case '(':
symbols[j][2]++;
j++;
break;
case ')':
j--;
symbols[j][2]--;
break;
default:
break;
}
if (symbols[0][0] < 0 || symbols[0][1] < 0 || symbols[0][2] < 0) return false;
}
// All symbol variables value should be 0 at the end
if (isMatrixZero(symbols)) return true;
else return false;
}
private static int countOpens(String str){
int opens=0;
for (int i=0; i< str.length(); i++){
if (str.charAt(i) == '[' || str.charAt(i) == '{' || str.charAt(i) == '(') opens++;
}
return opens;
}
private static boolean isMatrixZero(int[][] matrix){
for (int i=0; i < matrix.length;i++){
for (int j=0; j < matrix[0].length;j++){
if (matrix[i][j] != 0) return false;
}
}
return true;
}
}
任何建議都歡迎!
為什么不使用堆棧? 您可以使用HashMap代替字符串,而用大括號括起來是鍵,用右括號括起來是值。
private final static String openingBrackets = "([{<";
private final static String closingBrackets = ")]}>";
public static boolean checkBrackets(String input) {
Stack<Character> openedBrackets = new Stack<Character>();
HashMap brackets = new HashMap();
char[] inputs = input.toCharArray();
int x = 0;
for (char c : inputs) {
if (openingBrackets.indexOf(c) != -1) {
openedBrackets.push(c);
} else if (closingBrackets.indexOf(c) != -1) {
if (openedBrackets.isEmpty())
return false;
if (Math.abs(openedBrackets.pop() - c) > 2)
return false;
}
x++;
if (openedBrackets.size() > inputs.length - x)
return false;
}
return openedBrackets.isEmpty();
}
另外,這是相同的問題檢查字符串是否帶有圓括號
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.