| 12345678910111213141516171819202122232425262728293031323334353637383940 | 
							- 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
 
- }
 
 
  |