因此,这个问题是该问题的后续解决方案:允许相同字符串的快速字符串排列
在那里,我询问了我可以使用一组定义的字符串进行的所有可能的突变。我接下来要做的是过滤出具有相同组合但顺序不同的所有结果。
因此,如果输入为:["AB", "AC", "CA", "CB"]
,则输出应为["AB", "AC", "CB"]
,因为“ AC”和“ CA”具有相同的构造块。
因此,我的想法是先按字母顺序对每个字符串排序,然后再创建一个Set
。
我已经停留在第一部分了:(
let array = ["AB", "AC", "DC", "CA", "CB"]
print(type(of: array))
print(array)
let sortedArray = array.map{ $0.sorted() }
print(type(of: sortedArray))
print(sortedArray)
输出为:
Array<String>
["AB", "AC", "DC", "CA", "CB"]
Array<Array<Character>>
[["A", "B"], ["A", "C"], ["C", "D"], ["A", "C"], ["B", "C"]]
虽然我期望sortedArray:
["AB", "AC", "CD", "AC", "BC"]
然后我想将各个字符串重新组合在一起:
print(array.map{ $0.joined() } )
导致 ambiguous reference to member 'joined()'
但是我不知道如何解决这个问题。
var nonSortedString = "5121"
var sortedString = String(Array(nonSortedString.characters).sort())
但我看不到如何使用map
和朋友应用(转换为Swift 4之后)
任何帮助表示赞赏。
如果您想获取一个字符串,对其字符进行排序,然后从中构建一个新的字符串,在Swift 4中,您可以:
let string = "foobar"
let sortedString = String(string.sorted())
结果是:
“老兄”
因此,回到您的原始问题,您可以获取字符串(是排列的集合),并构建如下组合的排序数组:
let permutations = ["AB", "AC", "DC", "CA", "CB"]
// build set of combinations where each string has, itself, been sorted alphabetically
let combinations = Set(permutations.map { String($0.sorted()) })
// convert set (which removed duplicates) back to an array and sort it
let result = Array(combinations).sorted()
结果是:
[“ AB”,“ AC”,“ BC”,“ CD”]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句