当前位置: 首页 > 知识库问答 >
问题:

在Java中使用堆栈进行平衡符号检查

景才英
2023-03-14

嘿,伙计们,我有一个任务,我应该读取用户输入的字符串,并使用堆栈检查平衡符号。因此,如果字符串是“{[()]}”,那么字符串是平衡的,因为每个开口都有一个闭合。我的想法是使用一个循环来检查给定字符串中的每个字符,如果该字符串有一个开瓶器,比如“([{”那么它确实是stack.push(char),如果该字符是一个closer”)]}”,那么我需要使用stack。pop(char)。我遇到的问题是,我的教授强迫我使用字符串方法,而我在网上找到的任何帮助都是使用布尔方法,如果有人能在这里帮助我,我将不胜感激。

我知道我的代码不起作用,但你至少可以知道我的逻辑是什么。

进口java.util.*;

公共类平衡符号{

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);

        }


    }

}

}

显然,除了用不同的符号,我也会用同样的方法来弹出。

共有2个答案

金坚
2023-03-14
 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;
}
谷梁云瀚
2023-03-14

逻辑是这样的:

创建空堆栈。(你已经做到了)。

穿过绳子。

对于遇到的每个字符ch,如果ch为}]),堆栈为空,则返回false
else

如果它是( { [在堆栈中推送它
如果ch) } ]检查堆栈顶部。
如果堆栈顶部等于相应的打开括号,从堆栈弹出,否则返回false。
如果您已经到达字符串的结尾,堆栈不是空的,返回false
否则返回true。
返回false背后的原因是我们没有相应的匹配括号。这些是额外的括号。

首先尝试自己实现它。如果你面临任何问题,请予以评论。。我很乐意帮忙。

有问题请评论。

 类似资料:
  • 我得写Python补充函数: 对于递归检查输入字符串是否具有平衡括号的函数: 我不能使用堆栈。当输入字符串为空时,当括号开始和结束时,我必须包含一个选项(以及一个小提示,不是每个结束括号我们都应该做出相同的反应),并包含对括号以外字符的反应。补充函数必须返回未处理的文本和以前的结果。 我有代码,遗憾的是它并不适用于我找到的每个例子: 在测试中,错误的答案在 和 我试图从 pythontutor.c

  • 我有一些具体的任务。我们有像“(()[] 导入java.util.栈; 公开课考试{ }

  • 问题内容: 我有一个数据集,其中的类是不平衡的。类别为“ 1”或“ 0”,其中类别“ 1”:“ 0”的比率为5:1。如何在带有随机森林的sklearn中计算每个类别的预测误差以及相应的重新平衡权重,类似于以下链接:http : //www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm#平衡 问题答案: 您可以将样本权重参数传递给随机森林拟

  • 输入=堆栈数 但是你只能弹出输入,你不能推到它。输出也是另一个堆栈,你可以返回并推到它,但不能弹出 所以如果 由于您无法在中返回到

  • 本文向大家介绍在C ++中正确使用堆栈和堆?,包括了在C ++中正确使用堆栈和堆?的使用技巧和注意事项,需要的朋友参考一下 堆栈-函数内部声明的所有变量将占用堆栈中的内存。因此,函数内的任何局部变量都位于堆栈中。 堆-这是程序的未使用内存,可用于在程序运行时动态分配内存。因此,如果我们希望某些东西的寿命比声明它的函数的寿命更长,则必须在堆上分配它。 示例 堆内存中的主要问题是碎片,而堆栈中更容易出

  • 有3个堆栈-A、B、C 堆栈A和B被排序(堆栈顶部的数字最大)。堆栈C为空,仅允许5次操作: 推,弹出,顶,is_empty,创建 我们需要编写一个函数来接收堆栈A和B,将堆栈A和B中的所有数字移动到堆栈C,堆栈C必须排序(最大数字在顶部)。 我有算法: 比较A的顶部和B的顶部 我开始写代码,但有错误,我不知道为什么! 代码: