mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-06 01:18:23 +08:00
34 lines
980 B
JavaScript
34 lines
980 B
JavaScript
'use strict'
|
|
|
|
const permutate = (aString) => {
|
|
if (typeof aString !== 'string' || !aString) {
|
|
throw new Error('The arg must be a valid, non empty string')
|
|
}
|
|
const characters = aString.split('')
|
|
let permutations = [[characters.shift()]]
|
|
while (characters.length) {
|
|
const currentCharacter = characters.shift()
|
|
permutations = calculateCurrentCharacterPermutation(permutations, currentCharacter)
|
|
}
|
|
return permutations
|
|
.map(character => character.join(''))
|
|
.filter((item, index, self) => (self.indexOf(item) === index))
|
|
.sort()
|
|
}
|
|
|
|
const calculateCurrentCharacterPermutation = (allPermutations, currentCharacter) => {
|
|
const currentPermutations = []
|
|
allPermutations.forEach(permutation => {
|
|
let index = 0
|
|
while (index <= permutation.length) {
|
|
const tmp = [...permutation]
|
|
tmp.splice(index, 0, currentCharacter)
|
|
currentPermutations.push(tmp)
|
|
index++
|
|
}
|
|
})
|
|
return currentPermutations
|
|
}
|
|
|
|
export { permutate }
|