var numTilePossibilities = function (tiles) {
const map = new Map()
for (let char of tiles) {
map.set(char, (map.get(char) || 0) + 1)
}
return backtrack(map)
}
function backtrack(map) {
let count = 0
for (let [char, freq] of map.entries()) {
if (freq === 0) continue
map.set(char, freq - 1)
count += 1 + backtrack(map)
map.set(char, freq)
}
return count
}
var numTilePossibilities = function (tiles) {
let result = 0
const tileArr = tiles.split("").sort()
const used = Array(tileArr.length).fill(false)
function backtrack() {
for (let i = 0; i < tileArr.length; i++) {
if (used[i]) continue
if (i > 0 && tileArr[i] === tileArr[i - 1] && !used[i - 1]) {
continue
}
used[i] = true
result++
backtrack()
used[i] = false
}
}
backtrack()
return result
}
console.log(numTilePossibilities("AAB"))