394. Decode String

Leetcode link

题目简介

/**
 * @param {string} s
 * @return {string}
 */

题目给我们一个字符串 s,s 是一个编码后的字符串,由三个部分组成

  1. 数字,范围 [1, 300]
  2. 方括号 []
  3. 小写英文字母

其中数字后面必跟着括号,括号中必有英文字母,代表将括号中的英文字母重复对应的数字次数

比如: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('')
};

results matching ""

    No results matching ""