// 给定一个压缩过后的字符串,请恢复其原始状态。
// 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