我有一个这样的列表,例如列表名称为output
,其中包含:
[[[o, g], [g, o]], [[o, g, o, d]], [[o, d]], [[t, s, n, e, e, e, n, c, s]], [[t, s, n, e, e]], [[e, n, c, s]]]
我有这样的输入,说input
是:
ogodtsneeencs
现在很明显,input
可以由output
组成。我尝试subsequences()
的{{1}}来查找构成output
的可能组合,但问题是它不适用于所有input
。
有谁能说我如何找到等于input
的{{1}}组合?并且可能存储在某些output
中。
提前致谢。
答案 0 :(得分:4)
鉴于您提供的这一小组测试数据,我想出了这个:
def list = [[['o', 'g'], ['g', 'o']], [['o', 'g', 'o', 'd']], [['o', 'd']], [['t', 's', 'n', 'e', 'e', 'e', 'n', 'c', 's']], [['t', 's', 'n', 'e', 'e']], [['e', 'n', 'c', 's']]]
// For every combination of the lists
def result = list.combinations().collect { combination ->
// Join them into strings
combination*.join().with { stringcombo ->
// Then find every string in the list
stringcombo.findAll { word ->
// Which is not a substring of another string in the list
(stringcombo - word).every { it.indexOf( word ) == -1 }
}
}.permutations()*.join() // Then get every String permutation of these remaining strings
}.flatten().unique() // and get them into a single unique list
// And print them out
result.each {
println it
}
打印出来:
ogodtsneeencs
tsneeencsogod
如果没有更多数据,很难判断它是否正确,但它可能是一个很好的起点
更新以返回有效令牌的所有排列