Given an encoded string 3[abc]2[bc] the decoded output should be of the form “abcabcabcbcbc”. Assume that all the brackets are well formed and that all strings are encoded correctly.
/**
* @param {string} s
* @return {string}
*/
const decodeString = (str) => {
const stack = [];
for (const ch of str.split('')) {
if (ch === ']') {
let currStr = '';
while (stack[stack.length - 1] !== '[') {
currStr = stack.pop() + currStr;
}
stack.pop();
let k = 0;
let base = 1;
while (stack.length && parseInt(stack[stack.length - 1]) >= 0) {
k += parseInt(stack.pop()) * base;
base *= 10;
}
if (k !== 0) {
stack.push(currStr.repeat(k));
}
} else {
stack.push(ch);
}
}
return stack.join('');
};