JSFiddle - React, Tailwind, and code Playground
by sperske
JavaScript
const decodeString = (str) => {
let stack = [];
let popped = []; //sperske: candidate forgot to
// define 'popped'.
for (let i = 0; i < str.length; i++) {
let char = str[i];
if (char === "}") {
let multiplier = stack.pop();
while (popped != "{") {
multiplier = "" + popped + multiplier;
popped = stack.pop();
}
// stack.pop(); // No longer needed with the multiple number check above
stack.pop(); // )
let temp = "";
popped = stack.pop();
while (popped != "(") {
temp = popped + temp;
popped = stack.pop();
}
stack.push(temp.repeat(parseInt(multiplier)));
popped = []; //sperske: candidate forgot to
// reset 'popped'.
} else {
stack.push(char);
}
}
let result = stack.join('');
return result; //string
}
//alert(decodeString("a(bcd){3}e"));
alert(decodeString("a(bc(d){4}e){3}f"));