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
}