Per la stringa "ABC"
, lo snippet di codice seguente calcola 5 delle 6 permute totali. La mia strategia era quella di inserire ogni carattere in ogni indice possibile indice. Ma la funzione non ottiene mai "CBA"
come una possibile permutazione. Cosa mi manca?Calcola tutte le permutazioni di una stringa in Swift
var permutationArray:[String] = [];
let string: String = "ABC"
func permute(input: String) -> Array<String>
{
var permutations: Array<String> = []
/* Convert the input string into characters */
var inputArray: Array<String>
inputArray = input.characters.map { String($0) }
print(inputArray)
/* For each character in the input string... */
for var i = 0; i < inputArray.count; i++
{
/* Insert it at every index */
let characterInArray: String = inputArray[i]
var inputArrayCopy: Array<String> = []
for var y = 0; y < inputArray.count; y++
{
inputArrayCopy = inputArray
inputArrayCopy.removeAtIndex(i)
inputArrayCopy.insert(characterInArray, atIndex:y)
let joiner = ""
let permutation = inputArrayCopy.joinWithSeparator(joiner)
if !permutations.contains(permutation) {
permutations.insert(permutation, atIndex: 0)
}
}
}
return permutations
}
var permutations = permute(string)
print(permutations)
Non perdere tempo a reinventare la ruota. Basta google per un buon algoritmo di permutazione e implementarlo. Esempio: https://en.wikipedia.org/wiki/Heap%27s_algorithm – matt