gpt4 book ai didi

arrays - 在swift中查找字符串数组的所有组合

转载 作者:可可西里 更新时间:2023-11-01 00:21:35 26 4
gpt4 key购买 nike

我有一个字符串数组,我想找到它的元素的所有可能组合

For Example :

Array = [A,B,C,D]

should produce result as :

[A,AB,AC,AD,ABC,ABD,ACD,ABCD,B,BC,BD,BCD,C,CD,D]

这是我的逻辑:

  var array = ["A", "B", "C","D"]
var list = [String]()
for i in 0..<array.count{
let c = array[i]
list.append(c)
var d = c
for count in 1..<array.count{

if i+count < array.count{
for j in i+count..<array.count{
var a = d
a.appendContentsOf(array[j])
print("a : \(a)")
list.append(a)
}

}
d = c
d.appendContentsOf(array[count])
print("d : \(d)")
}
}
print(list.description)

Its Output is :

["A", "AB", "AC", "AD", "ABC", "ABD", "ACD", "B", "BC", "BD", "BBD", "C", "CD", "D"]

此输出缺少 ABCD 并将 BCD 错误地打印为 BBD

任何人请通过增强我的代码或为此提出您自己的逻辑来帮助我。

最佳答案

@yannick 的回答非常接近。

通过计算集合的幂集,您可以获得所有可能的子集(包括原始集和空集)。

获得幂集后,您只需将子集连接成一个字符串即可获得所需的结果。

这是完整的解决方案(连同更新的代码和大量注释):

extension Array {
var powerset: [[Element]] {
guard count > 0 else {
return [[]]
}

// tail contains the whole array BUT the first element
let tail = Array(self[1..<endIndex])

// head contains only the first element
let head = self[0]

// computing the tail's powerset
let withoutHead = tail.powerset

// mergin the head with the tail's powerset
let withHead = withoutHead.map { $0 + [head] }

// returning the tail's powerset and the just computed withHead array
return withHead + withoutHead
}
}

let myArray = ["A", "B", "C", "D"]
print(myArray.powerset) // -> [["D", "C", "B", "A"], ["C", "B", "A"], ["D", "B", "A"], ["B", "A"], ["D", "C", "A"], ["C", "A"], ["D", "A"], ["A"], ["D", "C", "B"], ["C", "B"], ["D", "B"], ["B"], ["D", "C"], ["C"], ["D"], []]

// joining the subsets
let myResult = myArray.powerset.map { $0.sort().joinWithSeparator("") }
print(myResult) // -> ["A", "AB", "ABC", "ABCD", "ABD", "AC", "ACD", "AD", "B", "BC", "BCD", "BD", "C", "CD", "D", ""]

附言

请注意,此解决方案使用递归方法,而您的解决方案使用迭代方法。

PPS

如果您不想在您的解决方案中使用空字符串 "",您可以将其过滤掉:

let myResult = myArray.powerset.map({ $0.sort().joinWithSeparator("") }).filter({ $0 != "" })

print(myResult) // -> ["A", "AB", "ABC", "ABCD", "ABD", "AC", "ACD", "AD", "B", "BC", "BCD", "BD", "C", "CD", "D"]

关于arrays - 在swift中查找字符串数组的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39160552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com