394. Decode String
题目简介
/**
* @param {string} s
* @return {string}
*/
题目给我们一个字符串 s,s 是一个编码后的字符串,由三个部分组成
- 数字,范围
[1, 300] - 方括号
[] - 小写英文字母
其中数字后面必跟着括号,括号中必有英文字母,代表将括号中的英文字母重复对应的数字次数
比如:s = "3[a]2[bc]" 解码后变成:"aaabcbc"
题目要求我们返回 s 解码后的字符串
解题思路
这题我们用栈 stack 来做
我们需要遍历字符串 s
当我们遇到 ] 以外的字符时,直接入栈
当遇到了 ],我们需要分成两步分别处理字母与数字
最后再将重复好的字母放回栈中,直到遍历完所有字符后将 stack 转换成字符串就好
Javascript
/**
* @param {string} s
* @return {string}
*/
var decodeString = function (s) {
const stack = []
for (const char of s) {
// push all chars except ']'
if(char !== ']') {
stack.push(char)
continue
}
let top = stack.pop()
let str = ''
// pop the letters
while(top !== '[') {
str = top + str
top = stack.pop()
}
let num = ''
top = stack.pop()
// pop the numbers
while(!Number.isNaN(Number(top))) {
num = top + num
top = stack.pop()
}
stack.push(top)
stack.push(str.repeat(Number(num)))
}
return stack.join('')
};