题目:给定一个字符串,只包含小写字母、数字和"[]";数字和"[]"一定满足格式:k[abc];且组合可嵌套;要求输出解码字符串
例:输入:"abc3[d2[mn]]"
输出:"abcdmnmndmnmndmnmn"
思路:遇到"["入栈,遇到"]"出栈;
初始化两个栈,一个存倍数,一个存[入栈前的结果作为前缀。
遇到]后,则将倍数出栈,并把当前[]区间内的字符串循环拼接成临时串;并且把前缀出栈,拼接完一个prefix+multi*[tmpRes]
func decodeString(s string) string {
var multiples []int
var prefixs [][]byte
var res []byte
multi := 0
for i:=0; i< len(s); i++ {
if s[i] >= '0' && s[i] <= '9' {
multi = 10*multi + int(s[i]-'0')
}
if s[i] >= 'a' && s[i] <= 'z' {
res = append(res, s[i])
}
if s[i] == '[' {
multiples = append(multiples, multi)
prefixs = append(prefixs, res)
multi = 0
res = []byte{}
}
if s[i] == ']' {
var tmp []byte
curMulti := multiples[len(multiples)-1]
multiples = multiples[:len(multiples)-1]
for j:=0;j< curMulti; j++ {
tmp = append(tmp, res...)
}
curPrefix := prefixs[len(prefixs)-1]
prefixs = prefixs[:len(prefixs)-1]
res = append(curPrefix, tmp...)
}
}
return string(res)
}