簡體   English   中英

在Java中使用堆棧進行平衡的符號檢查

[英]Balanced Symbol Check using Stack in Java

大家好,我給我分配了一個任務,我應該讀取用戶輸入的字符串,並使用堆棧檢查是否有平衡的符號。 因此,如果字符串為“ {{(()]}”),則該字符串是平衡的,因為每個開孔都有一個閉合。 我的想法是使用一個循環,該循環檢查給定字符串中的每個字符,並且該字符串是否具有諸如“ [[{”的開頭,則它確實具有stack.push(char)以及該字符是否更接近“)]。 }”,那么我需要使用stack.pop(char)。 我遇到的問題是,我的教授強迫我使用字符串方法,而在網上找到的任何幫助我都在使用布爾方法,如果有人可以在這里幫助我,我將不勝感激。

我知道我的代碼無法正常工作,但是您至少可以了解我的邏輯是什么。

導入java.util。*;

公共類BalancedSymbols {

public static String balancedSymbols(String lineToCheck){ //this is the method that im being forced to use

    Stack<String> stack = new Stack<String>();

   for (int i = 0; i<lineToCheck.length(); i++){

        char x = '(';
        char y = '{';
        char z = '[';

        char a;
        a = lineToCheck.charAt(i);

        if (a == x){

            stack.push(a);

        }

        if (a == y){

            stack.push(a);

        }

        if (a == z){

            stack.push(a);

        }


    }

}

}

顯然,除了使用不同的符號外,我會針對彈出操作執行相同的操作。

這是邏輯:

創建空堆棧。 (您已經完成了)。

遍歷字符串。

對於您遇到的每個字符ch ,如果ch是}])並且堆棧為空,則返回false
其他

如果是({[ 推入 堆棧
如果ch)}] 檢查 堆棧頂部
如果堆棧頂部等於從堆棧彈出的對應的開括號,否則返回false
如果您已到達String的末尾並且堆棧不為空,則返回false
否則返回true
返回false的原因是我們沒有與此匹配的括號。 這些是多余的括號

嘗試先自己實施。 如果您遇到任何問題,請對其進行評論。我很樂意為您提供幫助。

如有任何疑問,請發表評論。

 Create empty stack
 ==========================

private static boolean isValideEx(String str) {

    Stack<Character> st=new Stack<Character>();

    if(str == null || str.length() == 0)
        return true;

    for (int i = 0; i < str.length(); i++) {
        if(str.charAt(i)==')'){
                if(!st.isEmpty() && st.peek()=='('){
                    st.pop();
                }else{
                    return false;
                }
        }else if(str.charAt(i)==']'){
                if(!st.isEmpty() && st.peek()=='['){
                    st.pop();
                }else{
                    return false;
                }
        }else if(str.charAt(i)=='}'){
                if(!st.isEmpty() && st.peek()=='{'){
                    st.pop();
                }else{
                    return false;
                }
        }else{
            st.push(str.charAt(i));
        }

    }
    System.out.println(" sy "+st);

    if(st.isEmpty())
        return true;
    else
        return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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