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"));