
迭代

执行到最后一个字符串的时候,res会是最后一段字符串的值。
当遇到]的时候,会取出前一个结果,作为之后运算的res,如果之后遇到 [ 再整体压入栈中。
js
/**
* @param {string} s
* @return {string}
*/
var decodeString = function (s) {
const stack = []
let k = 0
let res = ''
for (const c of s) {
if ('0' <= c && c <= '9') {
// 数字
k = k * 10 + Number(c) // 多位数字的情况
} else if ('a' <= c && c <= 'z') {
// 不支持链式比较 'a' <= c <= 'z'
res += c
} else if (c === '[') {
// stack push
stack.push([k, res])
k = 0
res = ''
} else {
// ']'
const [pre_k, pre_res] = stack.pop()
res = pre_res + res.repeat(pre_k)
}
}
return res
}