跳转至

LC394 - 字符串解码

DecodeString.go
package Stack

import "strings"

type multiRes struct {
    multi int
    res   string
}

func decodeString(s string) string {
    stack := new(Stack[*multiRes])
    multi, res := 0, ""
    for i := 0; i < len(s); i++ {
        if s[i] >= '0' && s[i] <= '9' {
            multi = multi*10 + int(s[i]-'0')
        } else if s[i] >= 'a' && s[i] <= 'z' {
            res = res + string(s[i])
        } else if s[i] == '[' {
            tmp := new(multiRes)
            tmp.multi = multi
            tmp.res = res
            stack.Push(tmp)
            multi, res = 0, ""
        } else if s[i] == ']' {
            tmp := stack.Pop()
            res = tmp.res + strings.Repeat(res, tmp.multi)
        }
    }
    return res
}