39 lines
495 B
Go
39 lines
495 B
Go
package q443
|
|
|
|
func compress(chars []byte) int {
|
|
seqLen := 0
|
|
char := chars[0]
|
|
|
|
p := 1
|
|
|
|
writeNumber := func(num int) {
|
|
i := 1
|
|
for ; i*10 <= num; i *= 10 {
|
|
}
|
|
for ; i > 0; i /= 10 {
|
|
chars[p] = byte(num/i) + '0'
|
|
p++
|
|
num %= i
|
|
}
|
|
}
|
|
|
|
for _, c := range chars {
|
|
if c == char {
|
|
seqLen++
|
|
} else {
|
|
char = c
|
|
if seqLen > 1 {
|
|
writeNumber(seqLen)
|
|
}
|
|
seqLen = 1
|
|
chars[p] = char
|
|
p++
|
|
}
|
|
}
|
|
if seqLen > 1 {
|
|
writeNumber(seqLen)
|
|
}
|
|
return p
|
|
}
|
|
|
|
var _ = compress
|