js(98)~394. 字符串解码

90 阅读1分钟

力扣本题传送门

image.png

这个题,我看到也知道要用栈,但是怎么写不知道,看了助教的讲解也看了解析,发现官方的方法就是常规的解体思路,也容易理解,按照理解透彻的思路来写代码,基本上能一次性写下来

/**
 * @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;

};