これはwhileループの正しいロジックです: 1.スタックが空でない場合は実行してください... 2.スタックの最上部にある要素==キューの下部にある要素を確認します。これはどのようにループを反復するのですか?
これは、スタック/キューが最初に終了するまで続きます(回文があれば、同時に終了します)。私はif(s.pop()....)のためにforループを繰り返す必要があると思ったのですか?
乾杯!
これはwhileループの正しいロジックです: 1.スタックが空でない場合は実行してください... 2.スタックの最上部にある要素==キューの下部にある要素を確認します。これはどのようにループを反復するのですか?
これは、スタック/キューが最初に終了するまで続きます(回文があれば、同時に終了します)。私はif(s.pop()....)のためにforループを繰り返す必要があると思ったのですか?
乾杯!
ここに正しいコードがありますが、ロジックは書き込みがありますが、スタックの助けを借りて余分なスペースを使用しているだけなので、キューが不要です。
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");
}
}
単語が回文かどうかを確認するには、すべての文字をスタックにプッシュし、別の文字列にポップします。後者は最初のものと逆のものになります。だから、2つの文字列が同じかどうかを確認してください。
's'がスタックの場合...' q'とは何ですか? – Tavo
まず何をしようとしているのかを説明します。 – shmosel
おそらく 'push'と' add'コールで 'letter'(' i'ではなく)を使うつもりです。また、 'return new StringBuilder(word).reverse()。toString()。equals(word);'はもっと読みやすくなります。 –