java 与反向堆栈同时打印堆栈数据的问题

omvjsjqw  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(109)

这段代码是用来检查是否存在重复的括号的。我得到了为每个字符串。我无法找到我错在哪里

public class DuplicatePar {
    public static void main(String[] args) {
        String str = "((a+b)+c)";
        System.out.println(dupliPar(str));
    }
    public static boolean dupliPar(String str){
        Stack<Character> s = new Stack<>();
        for(int i = 0; i<str.length();i++){
            if(str.charAt(i) != ')'){
                s.push(str.charAt(i));
            }
            if(str.charAt(i) == ')' && s.peek() != '('){
                while(s.peek() !='('){                                      
                    s.pop();
                }
                s.pop();
            }
          
            else{
                return true;
            }
        }
      return false;
    }
}
6kkfgxo0

6kkfgxo01#

如前所述-

if(str.charAt(i) != ')'){
            s.push(str.charAt(i));
        }
        if(str.charAt(i) == ')' && s.peek() != '('){
            while(s.peek() !='('){                                      
                s.pop();
            }
            s.pop();
        }
      
        else{
            return true;
        }

假设第一个字符是'(',第一个'if'的条件为真(不是右括号),所以我们执行控制语句(push to stack)。
现在我们已经完成了“if”,第二个“if”有一个false条件,所以我们执行相关的“else”子句,并立即返回一个“true”结果。
添加“else”后:

if(str.charAt(i) != ')'){
            s.push(str.charAt(i));
        }
        else if(str.charAt(i) == ')' && s.peek() != '('){
            while(s.peek() !='('){                                      
                s.pop();
            }
            s.pop();
        }
      
        else{
            return true;
        }

同样,假设第一个字符是'(',第一个'if'的条件为真(不是右括号),所以我们执行控制语句(推栈)。
因此我们不执行第一个if语句的else子句,else子句是第二个if-else结构的全部,因此我们不会返回错误的结果,而是继续处理输入字符串。
这就是你所报告的特定问题的解决方案,但我不相信代码在所有情况下都能工作。

相关问题