6
var originalDigits = function (s) {20
const letterToDigits = {};22
for (const key in numberToWord) {23
const currWord = numberToWord[key];25
for (const letter of currWord) {26
if (!(letter in letterToDigits)) letterToDigits[letter] = new Set();27
letterToDigits[letter].add(key);31
const inputFreqs = {};33
for (let i = 0; i < s.length; i++) {34
const currChar = s[i];36
if (!(currChar in inputFreqs)) inputFreqs[currChar] = 0;37
inputFreqs[currChar]++;40
const letters = Object.keys(inputFreqs);42
const res = dfs(letters[0]);44
return [...res].sort().join("");46
function dfs(currLetter) {47
if (!isValid(inputFreqs)) return null;48
if (getTotalRemaining(inputFreqs) === 0) return [];49
const possibleDigits = letterToDigits[currLetter];51
for (const digit of [...possibleDigits]) {52
const wordRepresentation = numberToWord[digit];54
subtract(wordRepresentation);56
if (!isValid(inputFreqs)) {57
addBack(wordRepresentation);61
const nextLetter = getNext(inputFreqs);62
const nextDigits = dfs(nextLetter);64
if (nextDigits !== null) return [digit] + nextDigits;66
addBack(wordRepresentation);72
function isValid(inputFreqs) {73
for (const key in inputFreqs) {74
const count = inputFreqs[key];76
if (count < 0) return false;82
function getTotalRemaining(inputFreqs) {85
for (const key in inputFreqs) {86
const count = inputFreqs[key];94
function subtract(word) {95
for (const char of word) {96
if (!(char in inputFreqs)) inputFreqs[char] = 0;101
function addBack(word) {102
for (const char of word) {107
function getNext(inputFreqs) {108
for (const key in inputFreqs) {109
const count = inputFreqs[key];111
if (count > 0) return key;