这是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;
}
}
答案 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");
}
}