繁体   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