是字符串回归列表的结合吗?

时间:2014-01-14 15:53:28

标签: java c palindrome singly-linked-list

问题是:你有Singly linkedlist,其节点中包含String [any no of chars]。现在如何找到组合字符串[不需要从链表中构建字符串]是否是回文?

示例:[“abc”] - > [“d”] - > [“ed”] - > [“c”] - > [“ba”] - >是有效的输入linkedList           合并后的字符串将被提升为

这就是我的想法:

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

2.使用两个指针指向第一个节点,P1,P2。

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

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

5.如果P1到达结束时所有的char都耗尽了。然后字符串是回文。

但是在这种方法中,我遍历了2.5次链表。如果LinkedList会很庞大,这将是不好的。

任何人都可以提出更好的方法。

1 个答案:

答案 0 :(得分:0)

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