【问题标题】:Is combined Strings of LinkedList of strings palindrom? [closed]字符串回文的LinkedList的组合字符串吗? [关闭]
【发布时间】:2014-01-14 15:53:28
【问题描述】:

问题是:你有一个单链表,它的节点中包含 String[any no of chars]。现在如何找到组合字符串[无需从链表构建字符串]是否是回文?

示例:["abc"]-->["d"]-->["ed"]-->["c"]-->["ba"] --> 是有效的输入linkedList 组合字符串将是-abcdedcba

这是我想到的:

1.按节点遍历所有列表,计算组合字符串长度-N。

2.取两个指针指向First Node,P1,P2。

3.提前 P1 直到达到字符串长度 >=N/2。[我们必须记住以前的总长度] 现在将节点字符串中的 char 指针前进到指向 N/2+2th char[如果 N 是奇数] 或N/2+1th[如果 N 是偶数]。

4.从 P2 开始,使用指向节点字符串第一个字符的 char 指针。并在字符上执行相同的操作。

5.如果 P1 在所有字符耗尽的情况下结束。那么字符串是回文。

但在这种方法中,我遍历链表 2.5 次。如果 LinkedList 很大,那就不好了。

谁能提出更好的方法。

【问题讨论】:

  • 这应该在cs.stackexchange.com 询问,因为它是关于非常简单问题的最佳算法解决方案。
  • 为什么偶数长度不是回文? “abba”是回文,不是吗?
  • @Durandal 我也表达了同样的观点,但 abba 是四个字符!
  • @ElliottFrisch 很好,他写道“2.如果长度甚至 - 不是回文。”,我停止阅读那里;)
  • @Durandal 我现在已经编辑了这个问题。你现在想说什么?

标签: java c palindrome singly-linked-list


【解决方案1】:

您的解决方案是最优的,您不能以比 O(n) 更快的速度对列表执行任何操作(因为该问题需要读取其所有元素),而您的解决方案是 O(n)。遍历 1.5 次(不是 2.5 次——一次迭代到一半,一次从一半到开始,从停止到结束)也是非常小的常数。如果您不想重建字符串,我很确定没有更快的解决方案(虽然您的解决方案会消耗 N/2 额外空间,但如果您只有单向列表,这是不可避免的)。

【讨论】:

  • 如果我们在 linkedList 中有数百万个节点,我的解决方案还会更快吗?没有把握。您对此有何看法?
  • 没关系,你不会比线性更快,从理论上讲是不可能的。数百万个节点(其中包含简短的单词)仍然不到一秒。
猜你喜欢
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多