394. 字符串解码

解题思路
1 利用栈,空间换时间 countStack 记录当前的次数 alphaIndex记录当前开始的字母索引,alphaStack记录字母, 按照 次数[ 字母…] 为一个字母段,执行入栈和出栈
2 当是”]” 出栈处理,出栈按照一个字母段为部分 索引需要记录从什么位置开始出栈 也就是alphaIndex的值作用。
3 数字可能是多位数字 需要利用count =count*10 +int(s[i]-‘0’) 计算当前的字母段出现的次数
func decodeString(s string) string {alphaStack := make([]byte, 0)countStack := make([]int,0)alphaIndex := make([]int,0)var count intfor i:=0 ;i < len(s);i++{if s[i] >='0'&&s[i]<='9' {count =count*10 +int(s[i]-'0')}else if s[i]=='['{ // [ 后面肯定是字母// 可以把当前的数字放入次数数组countStack = append(countStack,count)count =0alphaIndex = append(alphaIndex,len(alphaStack))}else if s[i] ==']'{ // 对当前字母段出站// 获取当前字母段的次数 然后次数出栈c :=countStack[len(countStack)-1]countStack = countStack[:len(countStack)-1]// 获取当前字母段开始的索引 然后索引出栈index :=alphaIndex[len(alphaIndex)-1]alphaIndex = alphaIndex[:len(alphaIndex)-1]//获取当前的字母段str := string(alphaStack[index:])// 字母数组出站alphaStack = alphaStack[:index]for j:=0;j<c;j++{alphaStack = append(alphaStack,[]byte(str)...)}}else {alphaStack = append(alphaStack,s[i])}}return string(alphaStack)}

