平衡括号:

时间:2016-01-15 19:12:16

标签: java algorithm

我正在尝试解决平衡括号的问题,但却遇到错误。因为我的逻辑很好,我不知道为什么我得错了答案。我试图解决它很长一段时间,但无法得到任何方式。这是我在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");   
        }
    }


    }
}

1 个答案:

答案 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();

如果堆栈中没有任何内容,那么将使用默认值(永远不会与结束括号匹配)。