【发布时间】:2010-09-09 06:16:43
【问题描述】:
我在面试中使用这个问题,我想知道最好的解决方案是什么。
编写一个 Perl 子程序,它接受 n 个列表,然后返回 2^n-1 个列表,告诉您哪些项目在哪些列表中;即,哪些项目仅在第一个列表、第二个列表、第一个和第二个列表以及所有其他列表组合中。假设 n 相当小(小于 20)。
例如:
list_compare([1, 3], [2, 3]);
=> ([1], [2], [3]);
这里,第一个结果列表给出了仅在列表 1 中的所有项目,第二个结果列表给出了仅在列表 2 中的所有项目,第三个结果列表给出了两个列表中的所有项目。
list_compare([1, 3, 5, 7], [2, 3, 6, 7], [4, 5, 6, 7])
=> ([1], [2], [3], [4], [5], [6], [7])
这里,第一个列表给出了仅在列表 1 中的所有项目,第二个列表给出了仅在列表 2 中的所有项目,第三个列表给出了同时在列表 1 和列表 2 中的所有项目,如第一个例子。第四个列表给出了仅在列表 3 中的所有项目,第五个列表给出了仅在列表 1 和 3 中的所有项目,第六个列表给出了仅在列表 2 和 3 中的所有项目,第七个列表给出了所有项目在所有 3 个列表中。
我通常将此问题作为 n=2 的问题子集的后续问题。
解决办法是什么?
跟进:列表中的项目是字符串。可能有重复项,但由于它们只是字符串,因此应在输出中压缩重复项。输出列表中项目的顺序无关紧要,列表本身的顺序很重要。
【问题讨论】: