2017-08-17 99 views
-2

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

这将继续,直到堆栈/队列首先完成(如果一个回文,然后他们在同一时间完成)?我认为对于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; 
    } 
    } 
+0

如果's'是你的堆栈...什么是'q'? – Tavo

+1

首先解释你正在尝试做什么。 – shmosel

+0

你可能打算在'push'和'add'调用中使用'letter'(而不是'i')。另外,返回新的StringBuilder(word).reverse()。toString()。equals(word);'更具可读性。 –

回答

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"); 
    } 
} 
0

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