我正在尝试解决平衡括号的问题,但却遇到错误。因为我的逻辑很好,我不知道为什么我得错了答案。我试图解决它很长一段时间,但无法得到任何方式。这是我在java中的代码:
public class Solution {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0; i<n;i++){
Stack<Character> stack=new Stack<Character>();
char x,y;
for(int j=0; j<stack.size();j++){
x=sc.next().charAt(j);
y=stack.peek();
if(x=='{' || x=='[' || x=='('){
stack.push(x);
}
if(x=='}'){
if(y=='{'){
stack.pop();
// System.out.println("Yes");
}
// else{
// System.out.println("No");
//}
}else if(x==']'){
if(y=='['){
stack.pop();
}
}else if(x==')'){
if(y=='('){
stack.pop();
// System.out.println("Yes");
}
}
}
if(stack.empty()==true){
System.out.println("YES");
}else if(stack.empty()!=true){
System.out.println("NO");
}
}
}
}
答案 0 :(得分:0)
Stack<Character> stack=new Stack<Character>();
char x,y;
for(int j=0; j<stack.size();j++){
堆栈的初始大小为零。当您的代码到达此部分时,它会检查j
(0)是否小于stack.size()
(也为0)。由于它不是,它会跳过循环,然后进入结束状态。您希望循环播放您阅读的整个String
。
您可能希望将代码更改为以下内容:
Stack<Character> stack=new Stack<Character>();
char x,y;
String text = sc.next();
for(int j = 0; j < text.length(); j++){
x=text.charAt(j);
在将任何内容放入堆栈之前,stack.peek()
也存在问题,这会引发异常。你应该检查这种情况:
y = stack.empty() ? '\0' : stack.peek();
如果堆栈中没有任何内容,那么将使用默认值(永远不会与结束括号匹配)。