SOURCE

// 给定一个压缩过后的字符串,请恢复其原始状态。

// uncompress('3(ab)') // 'ababab'
// uncompress('3(ab2(c))') // 'abccabccabcc'
// 数字 k之后如果有一对括号,意味着括号内的子字符串在原来的状态中重复了k次。
// k是正整数。
// 测试用例的输入均为有效字符串,原始字符串中不存在数字

// function uncompress(s) {
//     const stack = [];
//     let currentStr = '';
//     let currentNum = 0;

//     for (let i = 0; i < s.length; i++) {
//         const char = s[i];

//         if (char >= '0' && char <= '9') {
//             //这里是为了处理类似‘12(ab)’ 表示重复12次的情况
//             currentNum = currentNum * 10 + parseInt(char, 10);
//         } else if (char === '(') {
//             stack.push({
//                 str: currentStr, num: currentNum
//             });
//             currentStr = '';
//             currentNum = 0;
//         } else if (char === ')') {
//             const { str: prevStr, num: repeatCount } = stack.pop();
//             currentStr = prevStr + currentStr.repeat(repeatCount);
//         } else {
//             currentStr += char;
//         }

//     };

//     return currentStr;

// };

function uncompress(s) {
    const stack = [];
    let currentStr = '';
    let currentNum = 0;

    for (let i = 0; i < s.length; i++) {
        const char = s[i];

        if (char >= '0' && char <= '9') {
            currentNum = currentNum * 10 + parseInt(char, 10);
        } else if (char === '(') {
            stack.push({
                str: currentStr,
                num: currentNum
            });
            
            currentStr = '';
            currentNum = 0;
        } else if (char === ')') {
            const { str: prevStr, num: repeatCount } = stack.pop();
            currentStr = prevStr + currentStr.repeat(repeatCount);
        } else {
            currentStr += char;
        };
    };

    return currentStr
}

console.log(uncompress('3(ab)')) // 'ababab'
console.log(uncompress('3(ab2(c))')) // 'abccabccabcc'
console 命令行工具 X clear

                    
>
console