2017-08-17 94 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

要檢查單詞是否是迴文,請將所有字符推送到堆棧,然後將它們彈出到另一個字符串。後者將與第一個相反。所以只要檢查兩個字符串是否相同。