func decodeString(s string) string { var sb strings.Builder beg, n := 0, len(s) for i := 0; i < n; { if '0' <= s[i] && s[i] <= '9' { sb.WriteString(s[beg:i]) num, lb, rb := findNext(s, i) // Left bracket, right bracket substr := decodeString(s[lb+1 : rb]) for j := 0; j < num; j++ { sb.WriteString(substr) } beg, i = rb+1, rb+1 } else { i++ } } if beg != n { // Write the last part sb.WriteString(s[beg:n]) } return sb.String() } func findNext(s string, beg int) (int, int, int) { lb := beg + 1 for ; s[lb] != '['; lb++ { } // Find lb num, _ := strconv.Atoi(s[beg:lb]) // Get repeat count cnt, n := 0, len(s) for i := lb; i < n; i++ { if s[i] == '[' { cnt++ } else if s[i] == ']' { cnt-- if cnt == 0 { return num, lb, i // Find rb } } } return num, lb, lb // Error }