func compress(chars []byte) int { fast, slow, cnt, n := 1, 0, 1, len(chars) if n <= 1 { return n } for ; fast < n; fast++ { if chars[fast] != chars[fast-1] { chars[slow] = chars[fast-1] slow++ if cnt != 1 { num := strconv.Itoa(cnt) for end, i := slow+len(num), 0; slow < end; slow, i = slow+1, i+1 { chars[slow] = num[i] } cnt = 1 } } else { cnt++ } } chars[slow] = chars[fast-1] slow++ if cnt != 1 { num := strconv.Itoa(cnt) for end, i := slow+len(num), 0; slow < end; slow, i = slow+1, i+1 { chars[slow] = num[i] } } return slow }