java - 检查表达式在括号方面是否平衡

标签 java nested stack

我正在尝试检查表达式在括号方面是否平衡,我的程序应该输出适当的消息,如下所示:(我正在从文件中读取表达式)

如果每个“)”都有一个“(”,那么它是平衡的。 如果有“)”而没有“(”,则缺少左括号,依此类推。

我计算出了“(A+B)”情况下的代码,它打印出平衡,但对于“(A+B))”情况,它打印出平衡和左缺失,我似乎无法找出问题所在

这是代码: (编辑:我把它作为一种方法来解决,当表达式平衡并且缺少右括号时,它工作得很好,但如果缺少左括号,它会打印出“平衡”)问题是当它缺少左括号时括号,返回的堆栈是空的,所以这就是它打印“balanced”的原因。我真的不知道如何解决这个问题!

 public static Stack isBalanced(String str) {

    Stack s = new Stack();
    char temp;

    for (int i = 0; i < str.length(); i++) {
        if (str.charAt(i) == '(') {
            s.push(str.charAt(i));
        } else if (str.charAt(i) == ')') {
                if (!s.isEmpty()) {
                temp = (char) s.pop();
            }
        }
    }
    return s;
}

最佳答案

这似乎是解决问题的过于复杂的方法。您只需意识到在这种情况下您只匹配一对可能的对,因此简单的计数就足够了,从而可以大大简化这一过程。

只需扫描字符串并检查每个字符即可。在每个 ( ) 处增加一个计数器,在每个 ) 处减少一个计数器。

如果计数器低于零,那么您就有一个额外的右括号。如果您完成扫描并且计数器不为零,那么您就有一个额外的左括号。

关于java - 检查表达式在括号方面是否平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20396588/

相关文章:

amazon-web-services - Terraform cloudformation 将未知变量堆栈到 UserData 上

java - 在 Couchbase 中使用 CRUD 操作

JavaFx运行出错

java - 无法加载 xsl 文件

c++ - 如何以多态方式无限嵌套对象

javascript - Vue.js 下拉嵌套菜单(当子事件时保持父打开)

java - 带代理的 SseEmitter

json - 搜索使用json文件创建的 Elasticsearch 索引

java - 尝试在 java 中使用递归创建指数计算器时出现堆栈溢出错误

C++:高速堆栈