MCPcopy Create free account
hub / github.com/OBKoro1/web-basics / decodeString

Function decodeString

src/leetCode/decode-string/decode-string.js:3–33  ·  view source on GitHub ↗
(s)

Source from the content-addressed store, hash-verified

1/* eslint-disable no-cond-assign */
2// 栈解法 先入后出 算出里面括号的结果
3function decodeString(s) {
4 let stack = []
5 let res = ''
6 let count = 0
7 // 扫描每一个字符
8 for (let i = 0; i < s.length; i++) {
9 let item = s[i]
10 if (item >= '0' && item <= '9') {
11 // 获取当前循环的数字 如果以前有数字 加上当前的数字 要加10倍。 比如: 100[a]
12 count = count * 10 + Number(item)
13 continue
14 } else if (item === '[') {
15 stack.push({ count, lastRes: res }) // 收集以前的结果以及本次的循环次数
16 // 重置 收集本次入栈的字符
17 res = ''
18 count = 0
19 continue
20 } else if (item === ']') {
21 // 先弹出里面的结果
22 let { count, lastRes } = stack.pop() // 出栈 这次循环几次字符以及以前收集的字符
23 // 外面的栈最后结算 外面的值被认作lastRes添加 比如'dd3[a2[c]]' // 进第一个栈时把dd传进去做lastres
24 res = lastRes + res.repeat(count) // 循环的字符串 + 以前收集的字符 拼接
25 continue
26 }
27 res += s[i]
28 // 收集当前的字符
29 // 不管是单独的: mn2[dd] res = 'mn'
30 // 还是入栈的: [abc res = 'abc'
31 }
32 return res
33}
34
35// 递归解法
36// function decodeString(s) {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected