gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:52:54 24 4
gpt4 key购买 nike

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

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

我计算出了“(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com