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

正在尝试创建一个检查平衡字符串的方法

白星腾
2023-03-14

这是我的方法代码,不会给我错误,但在调用时不起作用,如有任何帮助,将不胜感激。谢谢:

static boolean isBalanced(String expr){
Stack stack = new Stack();

    for (char ch : expr.toCharArray()) {
        
        if (ch == '{' || ch == '(' || ch == '[') {
            stack.push(expr);

            
            } else {
                if (expr.isEmpty()) {
                                return false;
                        }
                
                    
                char latestOpenedPar = (char)stack.pop();
            
                if (latestOpenedPar == '{' && ch != '}') { 
                    return false;
                } else if (latestOpenedPar == '(' && ch != ')') { 
                    return false;
                } else if (latestOpenedPar == '[' && ch != ']') { 
                    return false;
                }
            }
                
            }

    return stack.isEmpty();
  

}

共有2个答案

司允晨
2023-03-14

这个问题不太清楚,但我想你想知道不同的括号是否“一致”

  1. if(expr.is空()){返回false;}这是无用的,因为如果条件为真,它将永远不会进入for循环
  2. if(ch == '{' || ch == '(' || ch == '[') { stack.push(exr);}在这里,您将作为输入的整个字符串放入堆栈中,但是在您将stack.pop()与各种括号进行比较之后,因此正确的语句可以是stack.push(ch);
  3. 你做stack.pop()而不检查堆栈是否至少有一个元素
闾丘成双
2023-03-14

如果字符串是“”(abc)”,你将按下,然后弹出四次,分别为abc)和,这当然不起作用。还有expr。isEmpty()在循环中永远不会返回true,因为如果它为空,expr。toCharArray()将返回一个长度为零的数组,循环将执行零次。使用peek()。

此外,您的堆栈应该声明为:

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

在这种情况下,您不需要强制转换pop()peek()返回的值;它将自动从字符解封为字符

 类似资料:
  • 问题内容: 我想测试输入的String是否平衡。如果有匹配的左,右括号,括号或花括号,则将是平衡的。 我在选择做什么时遇到问题。我是否应该将每个左括号或右括号,方括号或大括号放在堆栈中,然后弹出它们?如果我将它们弹出,那对我有什么帮助? 问题答案: 1)对于每个开口支架:将其推入堆栈。 2)对于每个右括号:从堆栈中弹出并检查括号的类型是否匹配。如果不退货; 即 String中的当前符号是,如果从堆

  • 我想测试输入字符串是否平衡。如果有一个匹配的开始和结束括号、括号或大括号,这将是平衡的。 我在选择做什么时遇到了问题。我是否应该将每个开始或结束的括号、括号或大括号放在一个堆栈中,然后将它们弹出?如果我把它们拿出来,这对我有什么帮助?

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

  • 在这个问题之前,我先要说明一个事实,那就是我学习编程才一个月,而这个学校的作业却把我难住了。具体地说,它是摩尔斯电码到英语翻译器(反之亦然)...这是我被困住的部分:

  • 作为一名java(和编程)新手,我在完成分配给我们的任务时遇到了麻烦。作业分为三部分,检查给定的字符串是否有平衡括号。 “规则”如下: -是平衡的

  • 例如: 字符串1=helloworld字符串2=asdfuvjerhelloworld 这应该是真的。 另一个例子:字符串1=helloworld字符串2=lshewodxzr 这也应该是真的。 所以我正在研究如何创建一个方法,它将返回一个布尔值,检查第二个字符串是否包含第一个字符串中的字母。在第二个示例中,string2只有一次字母l,尽管字母l在string1中出现了三次,但仍然返回true。