它有什么不同?

时间:2017-11-23 07:23:16

标签: java stack

此问题与hackerRank中的问题有关 - https://www.hackerrank.com/challenges/java-stack/problem

在循环中将Stack放入内部有什么不同?

如果我把Stack放在循环中,它对于模式' []'返回true,但是为false 如果我在课堂上采取它。

正确的答案应该是真的。

 import java.util.*;
    class Solution{

       public static void main(String []argh)
        {
      Scanner sc = new Scanner(System.in);


      while (sc.hasNextLine()) {
         String input=sc.nextLine();
           Stack<Character>  stack =  new Stack<>();
          for( char c : input.toCharArray() ){


              if( c == '{' || c == '(' || c =='['){
                  stack.push(c);
                  continue;
              }

              if( c == '}' && !stack.isEmpty() && stack.peek() == '{' ){
                  stack.pop();
                  continue;
              }

               if( c == ')' && !stack.isEmpty() && stack.peek() == '(' ){
                  stack.pop();
                  continue;
              }
               if( c == ']' && !stack.isEmpty() && stack.peek() == '[' ){
                  stack.pop();
                  continue;
              }

              if( c == '}' || c == ')'|| c == '['){
                  stack.push(c);
                  break;
              }
   } //end for
          System.out.println(stack.isEmpty());
          } //end while



      } //end main


   } //end class

1 个答案:

答案 0 :(得分:1)

在循环内部,将在while循环的每次迭代中创建一个全新的堆栈。如果你把它放在类级别,那么在程序的生命周期中只会创建一个堆栈。

只有在您有多行输入时才会有所不同。

如果您只使用一个堆栈,那么该堆栈还将包含上一行输入的括号,使其成为可能:

{
false
}
true

首先,我输入了{。这不平衡,所以false。在下一行中,我输入了}。它不应该平衡,但输出为true。这是因为前一行的{仍然在堆栈中!这就是为什么你应该为每一行创建一个新的堆栈(每次循环迭代)。

另一种方法是将堆栈放在类级别,但在每次迭代开始时调用clear

    while (sc.hasNextLine()) {
        stack.clear(); // <----
        String input=sc.nextLine();
        for( char c : input.toCharArray() ){