这个while循环如何迭代?

时间:2017-08-17 02:26:57

标签: java for-loop while-loop stack queue

这是while循环的正确逻辑:  1.如果堆栈不为空,则执行...  2.检查堆栈顶部的元素==队列底部的元素。

这将继续,直到堆栈/队列完成(如果是回文,然后它们同时完成)?我认为if(s.pop()....)我必须用for循环迭代?

干杯!

for (int i = 0; i < word.length(); i++) {
    letter = word.charAt(i);
    s.push(i);
    q.add(i);
  }

  while (!s.isEmpty()) {
    if (s.pop()) != q.remove()) {
      return false;
    }
  }

2 个答案:

答案 0 :(得分:0)

要检查单词是否为回文,请将所有字符推送到堆栈,然后将它们弹出到另一个字符串。后者将与第一个相反。所以只需检查2个字符串是否相同。

答案 1 :(得分:0)

这是正确的代码,是的,你的逻辑是写的,但它使用了太多的空间你可以在堆栈的帮助下完成它,只需要不需要队列。

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

class Test{
    public static void main(String[] args) {
        String word = "diid";
        Stack<Character> s = new Stack<>();
        Queue<Character> q = new LinkedList<>();
        for (int i = 0; i < word.length(); i++) {
            char letter = word.charAt(i);
            s.push(letter);
            q.add(letter);
          }

          while (!s.isEmpty()) {
            if (s.pop() != q.remove()) {
              System.out.println("Not Palindrome");
              return;
            }
          }
          System.out.println("Palindrome");
    }
}