mathball
Version:
A JavaScript library for Competitive Programming
43 lines (36 loc) • 1.06 kB
JavaScript
;
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
/* String Permutation
* Function: getAllPerm()
*/
var validate = require('../validation/string');
function getAllPerm(str) {
var letters = str.split(''),
results = [[letters.shift()]];
var _loop = function _loop() {
var currLetter = letters.shift();
var tmpResults = [];
results.forEach(function (result) {
var rIdx = 0;
while (rIdx <= result.length) {
var tmp = [].concat(_toConsumableArray(result));
tmp.splice(rIdx, 0, currLetter);
tmpResults.push(tmp);
rIdx++;
}
});
results = tmpResults;
};
while (letters.length) {
_loop();
}
return results.map(function (letterArray) {
return letterArray.join('');
}).filter(function (el, idx, self) {
return self.indexOf(el) === idx;
}).sort();
}
exports.permutation = function (str) {
validate(str, 'permutation');
return getAllPerm(str);
};