簡體   English   中英

Java檢查平衡括號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM