递归版
const decodeString = function (s) {
let i = {value: 0};
// console.log(decodeStringSub(i, s));
return decodeStringSub(i, s);
};
const decodeStringSub = function (i, s) {
let res = '';
for (let ii = s.length; i.value < ii && s[i.value] !== ']';) {
if (!/[0-9]/.test(s[i.value])) {
res += s[i.value++];
} else {
let count = '';
// console.log(i,s[i],/[0-9]/.test(s[i]));
while (i.value < ii && /[0-9]/.test(s[i.value])) {
// console.log(s[i]);
count += s[i.value++];
}
count = +count;
++i.value;
let str = decodeStringSub(i, s);
// while (s[i++] !== ']') {
// }
++i.value;
while (count-- > 0) {
// console.log(count);
res += str;
}
}
}
return res;
}
普通版本
const decodeString = function (s) {
let stackStr = [], stackCount = [], res = ''
for (let i = 0, ii = s.length; i < ii;) {
if (/[0-9]/.test(s[i])) {
let count = '';
while (i < ii && /[0-9]/.test(s[i])) {
// console.log(s[i]);
count += s[i++];
}
stackCount.push(+count);
} else if (s[i] === '[') {
stackStr.push(res);
res = '';
++i;
} else if (s[i] === ']') {
let time = stackCount.pop();
let tempStr = stackStr.pop();
while (time-- > 0) {
// console.log(count);
tempStr += res;
}
res = tempStr;
++i;
} else {
res += s[i++];
}
}
return res;
console.log(res);
}