394. Decode String
解题思路
- 数字的处理
32[abc3[b]]循环这个的时候遇到连续的数字 需要做累加操作curNum = curNum * 10 + Number(char) - 当遇到 [ 时 需要将 preString 即 累加的字符
curString = ''先入栈,数字curNum = 32后入栈 - 当遇到字母时累加字母
- 当遇到 ’]‘ 需要出栈
num preString
例子 32[abc3[b]]的步骤
- 3 curNum = 3
- 2 curNum = 3 * 10 + 2
- [ 入栈 stack = ['', 32];重置 curSring = '' curNum = 0
- abc curString = 'abc'
- 3 curNum = 3
- [ 入栈 stack = ['', 32, 'abc', 3];重置 curSring = '' curNum = 0
- b curString = 'b'
- ] 出栈 num = 3 preString = 'abc'; curString = 'abc' + multi(3, 'b') curString = 'abcbbb'
- ] 出栈 num = 32 preString = ''; curString = '' + multi(32, 'abcbbb') 返回 curString 即可
代码
/**
* @param {string} s
* @return {string}
*/
/**
* @param {string} s
* @return {string}
*/
const decodeString = function (s) {
const stack = []
let curNum = 0
let curString = ''
let isNumber = (a) => {
return !Number.isNaN(Number(a))
}
let multStr = (num, str) => {
let s = '';
while(num !== 0) {
num--
s += str
}
return s
}
for(let char of s) {
if(char === '[') {
stack.push(curString)
stack.push(curNum)
curString = ''
curNum = 0
} else if (char === ']') {
const num = stack.pop()
const preString = stack.pop()
curString = preString + multStr(num, curString)
} else if(isNumber(char)) {
curNum = curNum * 10 + Number(char)
} else {
curString += char
}
}
return curString
}