我在面试中使用这个问题,我想知道最好的解决方案是什么。
编写一个 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 的此问题子集的后续问题。
解决办法是什么?
跟进:列表中的项目是字符串。可能有重复项,但由于它们只是字符串,因此应在输出中压缩重复项。输出列表中项目的顺序无关紧要,列表本身的顺序很重要。