如何构建三个(或N个)单独的字符列表中没有重复字符的字符串?

时间:2018-07-14 11:30:57

标签: algorithm

我一直在研究一个可以描述如下的问题。

系统会为您提供3个字符列表。

L1 = [a,b,c,d]

L2 = [e,f,g,a]

L3 = [m,n,o,g,k]

通过从每个列表中选取一个字符,您可以制作多少个字符串?

您只能从每个列表中选择一个字符(字符串的长度应为3)。结果字符串不应包含任何重复的字符。每个列表都保证包含唯一的字母。您从中选择的列表顺序无关紧要。

1 个答案:

答案 0 :(得分:1)

您可以创建Cartesian product of multiple arrays,然后通过计算集合中的唯一项来过滤数组。

var data = [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'a'], ['m', 'n', 'o', 'g', 'k']],
    result = data
        .reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []))
        .filter(a => new Set(a).size === a.length);

console.log(result.map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }