Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LinkedList的组合字符串是否为回文?_Java_C_Palindrome_Singly Linked List - Fatal编程技术网

Java LinkedList的组合字符串是否为回文?

Java LinkedList的组合字符串是否为回文?,java,c,palindrome,singly-linked-list,Java,C,Palindrome,Singly Linked List,问题是:您有一个单独的linkedlist,它的节点中包含字符串[任何字符数]。现在,如何找到组合字符串[不需要从linkedlist构建字符串]是回文还是非回文 示例:[“abc”]-->[“d”]-->[“ed”]-->[“c”]-->[“ba”]-->是有效的输入链接列表 组合字符串应为-abcdedcba 这就是我的想法: 1.按节点遍历所有列表,并计算组合字符串长度-N 2.将两个指针指向第一个节点P1、P2 3.将P1前进到字符串长度>=N/2。[我们必须记住以前的总长度]现在将节点

问题是:您有一个单独的linkedlist,它的节点中包含字符串[任何字符数]。现在,如何找到组合字符串[不需要从linkedlist构建字符串]是回文还是非回文

示例:[“abc”]-->[“d”]-->[“ed”]-->[“c”]-->[“ba”]-->是有效的输入链接列表 组合字符串应为-abcdedcba

这就是我的想法:

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

2.将两个指针指向第一个节点P1、P2

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

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

5.如果P1到达终点时所有字符均已耗尽。那么字符串是回文的

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


有人能提出更好的方法吗。

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

这应该在第二次会议上提出,因为这是关于非常简单问题的最佳算法解决方案。为什么偶数长度不是回文?“阿巴”是回文,不是吗?@Durandal我也这么说,但阿巴是四个字符@ElliottFrisch他写道:“2.如果长度相等——不是回文。”,我就不再读了;)@Durandal我现在编辑了这个问题。您现在会怎么说?如果linkedList中有数百万个节点,我的解决方案还会更快吗?不确定。你是怎么想的?没关系,你不会比线性的更快,从理论上来说是不可能的。数以百万计的节点(其中包含短单词)仍不到一秒。