Задача: Сжатие строки

Задача: Сжатие строки

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
}




Report Page