[英]Java Check Balanced Parentheses
我需要編寫一個程序來檢查括號是否平衡,我知道該怎么做並且已經實現了。 但是,還有第二個問題,我遇到了麻煩:“給出一種算法,如果該字符串未正確嵌套和平衡,則該算法返回第一個有問題的括號的字符串中的位置,也就是說,如果找到了多余的右括號, ,請返回其位置;如果左括號過多,請返回第一個多余的左括號的位置。”
我們還沒有學習棧或正則表達式,所以我無法利用它們。 下面是我的實現,以檢查嵌套括號是否平衡。
public static int checkNest(char[] arr) {
int counter = 0,index = 0;
for(int i=0; i<arr.length; i++) {
if(arr[i] == '(')
counter++;
else if(arr[i] == ')')
counter--;
}
if(counter == 0)
index = -1;
return index;
}
現在,不正確的索引將始終為0,我需要操縱代碼以正確顯示不正確的括號的索引。
通常,當您有多個括號類型時,必須使用Stack
。 您只有一個錯誤:發現反括號時,應保持反調並增加反斜率;反之,則應減少反斜率。 當計數器在迭代的任何步驟均為負數時-則不平衡。
public static boolean isBalanced(String str) {
Deque<Character> stack = new LinkedList<>();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch == '(' || ch == '[' || ch == '{')
stack.push(ch);
else {
if (stack.isEmpty())
return false;
char prv = stack.pop();
if (prv == '(' && ch != ')')
return false;
if (prv == '[' && ch != ']')
return false;
if (prv == '{' && ch != '}')
return false;
}
}
return stack.isEmpty();
}
如果您只有一種類型的括號,那么您可能只有一個計數器:
public static boolean isBalanced(String str) {
int count = 0;
for (int i = 0; i < str.length() && count >= 0; i++) {
if (str.charAt(i) == '(')
count++;
else if (str.charAt(i) == ')')
count--;
}
return count == 0;
}
public static int checkNest(char[] arr) {
int counter = 0,index = 0;
for(int i=0; i<arr.length; i++) {
// Only one incorrect parentheses.
index = i;
if(arr[i] == '(')
counter++;
else if(arr[i] == ')')
counter--;
}
if(counter == 0)
index = -1;
return index;
}
對於額外的右括號,如果計數器為零,您可以立即返回i
的當前值,但是對於額外的左括號,您必須繼續解析字符串直到結尾,因此您必須記住最后一個左括號的位置與counter==0
:
public static int checkNest(char[] arr) {
int counter = 0,index = -1;
for(int i=0; i<arr.length; i++) {
if(arr[i] == '(') {
if (counter == 0) {
index = i;
}
counter++;
} else if(arr[i] == ')') {
if (counter == 0) {
return i;
}
counter--;
}
}
if (counter == 0) {
return -1;
}
return index;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.