diff --git "a/394.\345\255\227\347\254\246\344\270\262\350\247\243\347\240\201.js" "b/394.\345\255\227\347\254\246\344\270\262\350\247\243\347\240\201.js" new file mode 100644 index 0000000..1d50507 --- /dev/null +++ "b/394.\345\255\227\347\254\246\344\270\262\350\247\243\347\240\201.js" @@ -0,0 +1,42 @@ +/** + * @param {string} s + * @return {string} + */ +function decodeString(s) { + let strStack = [] + let numStack = [] + let res = '' + let num = 0 + for (let c of s) { + if (/\d/.test(c)) { + num = num * 10 + +c // 算出倍数 + } else if (c === '[') { + numStack.push(num) // 倍数num进入栈等待 + strStack.push(res) // result串入栈 + res = '' + num = 0 + } else if (c === ']') { + let repeatTimes = numStack.pop() // 获取拷贝次数 + res = strStack.pop() + res.repeat(repeatTimes) + } else { + res += c + } + } + console.log(res) + return res +} +// 测试用例 +decodeString('3[a2[c]]') + +/** 示例 1: + 输入:s = "3[a]2[bc]" + 输出:"aaabcbc" + + 示例 2: + 输入:s = "3[a2[c]]" + 输出:"accaccacc" + + 示例 3: + 输入:s = "2[abc]3[cd]ef" + 输出:"abcabccdcdcdef" +*/