2016-01-15 128 views
-4

我想解決一個平衡括號的問題,但得到錯誤。我不知道爲什麼我會錯誤地回答,因爲我的邏輯很好。我試圖解決它很長一段時間,但不能得到任何方式。這是我在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"); 
     } 
    } 


    } 
} 
+2

錯誤是什麼? –

+0

沒有錯誤。我在幾個測試用例中遇到了錯誤的答案。測試用例:3 {[()]} {[(])} {{[[(())]]}}對於上述測試用例,它應該打印YES NO YES,但打印YES YES YES –

+2

,你的第一句話提到了一個錯誤... –

回答

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

將使用默認值(即不會匹配右括號),如果沒有什麼堆棧。

+0

我已經改變了代碼,他們告訴我的方式。現在沒有輸出。 –

+0

@RaquibaSultana你的'stack.peek()'部分有一個bug。我已經爲該部分添加了修復程序。 – resueman

+0

還有一件事:[使用Deque](https://docs.oracle.com/javase/8/docs/api/java/util/Stack.html):_更完整和一致的LIFO堆棧操作集由'Deque'接口及其實現,應優先於此類使用._(避免遺留類和棄用的部分。) – greybeard