2017-08-17 7 views
-2

これはwhileループの正しいロジックです: 1.スタックが空でない場合は実行してください... 2.スタックの最上部にある要素==キューの下部にある要素を確認します。これはどのようにループを反復するのですか?

これは、スタック/キューが最初に終了するまで続きます(回文があれば、同時に終了します)。私はif(s.pop()....)のためにforループを繰り返す必要があると思ったのですか?

乾杯!

+0

's'がスタックの場合...' q'とは何ですか? – Tavo

+1

まず何をしようとしているのかを説明します。 – shmosel

+0

おそらく 'push'と' add'コールで 'letter'(' i'ではなく)を使うつもりです。また、 'return new 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

単語が回文かどうかを確認するには、すべての文字をスタックにプッシュし、別の文字列にポップします。後者は最初のものと逆のものになります。だから、2つの文字列が同じかどうかを確認してください。

関連する問題