这个题,我看到也知道要用栈,但是怎么写不知道,看了助教的讲解也看了解析,发现官方的方法就是常规的解体思路,也容易理解,按照理解透彻的思路来写代码,基本上能一次性写下来
/**
* @param {string} s
* @return {string}
*/
var decodeString = function (s) {
const sQueue = [], nQueue = [];
let st = '', num = 0;
for (const w of s) {
if (!isNaN(w)) {
num = num * 10 + Number(w);
// nQueue.push(num)
} else if (w === '[') {
// 把之前拼接的st入栈
sQueue.push(st);
st = '';
nQueue.push(num);
num = 0
} else if (w === ']') {
// 这个拿到肯定是上一次的number
let repeatTime = nQueue.pop();
// 把之前的和新的需要重复的 构建子串
st = sQueue.pop() + st.repeat(repeatTime)
} else {
st += w;
}
}
return st;
};