Задача: Сжатие строки
https://t.me/Golang_googleУсловие: дается массив символов chars, сожмите его, используя следующий алгоритм:
Начинайте с пустой строки s. Для каждой группы последовательных повторяющихся символов в chars:
Если длина группы равна 1, добавьте символ для просмотра.
В противном случае добавьте символ, за которым следует длина группы.
Сжатые строки не должны возвращаться отдельно, а вместо этого должны храниться во входном символьном массиве chars. Обратите внимание, что длина группы, равная 10 или более, будет разделена на несколько символов в chars.
После того, как вы закончите изменять входной массив, верните новую длину массива.
Вы должны написать алгоритм, который использует только постоянное дополнительное пространство.
Пример:
Ввод: chars = ["a","a","b","b","c","c","c"]
Вывод: Return 6, and the first 6 characters of the input array should be: ["a","2","b","2","c","3"]
Решение:
Code Go
func compress(chars []byte) int {
var count, index int = 1, 0
for i := 1; i <= len(chars); i++ {
if i < len(chars) && chars[i] == chars[i - 1] {
count++
} else {
chars[index] = chars[i - 1]
index++
if count > 1 {
for _, ch := range strconv.Itoa(count) {
chars[index] = byte(ch)
index++
}
}
count = 1
}
}
return index
}