如何实现字符比较器来查找Deque是否为回文



我有一个类isPalindrome,在那里我接收一个字符串,将其转换为Deque,然后发现Deque的顺序是从前到后还是从后到前相同。我已经学会了使用迭代器来帮助自己完成这项任务,但当我尝试运行代码时,似乎出现了问题。

这是我到目前为止的代码:

public boolean isPalindrome(String word) {
Deque<Character> L = new LinkedListDeque<>();
for (int x = 0; x < word.length()-1; x++) {
L.add(word.charAt(x));
}
if (L.descendingIterator() == L.iterator()) {
return true;
} else {return false;}

谁能解释一下我在这件事上哪里出错了吗。我试着调试这个代码已经很久了。任何对我的代码的编辑和解释都将不胜感激:(

附言:我的LinkedListDeque几乎就是这个

public class LinkedListDeque<T> extends LinkedList<T> implements Deque<T> {

}

迭代器本身无法进行比较。您必须对其进行迭代,以获得基础集合的值(这就是名称的来源(。

final Iterator<Character> asc = L.iterator();
final Iterator<Character> desc = L.descendingIterator();
// both iterators have the same underlying collection, so `hasNext` _must_ return the same value for both
while(asc.hasNext() && desc.hasNext()) {
if (!Objects.equals(asc.next(), desc.next()) {
// characters are different, definitely not a palindrome
return false;
}
}
// both iterators fully consumed without finding an offending character => a palindrome was found
return true;

CCD_ 3检查是否还有更多的元素尚未被访问。Iterator#next将迭代器向前移动一,即它消耗元素并返回它

关于您的代码的更多观察:

  • ==比较内存地址,而不是对象的值
  • Iterator实例不实现equals,因此它们无法进行比较
  • 不需要创建新的LinkedListDeque,因为LinkedList已经实现了Deque
  • ArrayDeque是另一种Deque类型,其不遭受与LinkedList相同的存储器开销
  • 该算法对deque进行了两次完全迭代,前后两次;这是低效的(工作量的两倍(。当两个迭代器在中间相遇时停止就足够了(但迭代器接口不提供这样的功能。也许使用ListIterator可以帮助避免这种情况(。对于简单和简短的输入,这不会是一个问题

相关内容

  • 没有找到相关文章

最新更新