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

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

https://t.me/pythonl

Условие: дается массив символов 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"]


Решение:

Python

class Solution:
    def compress(self, chars: List[str]) -> int:
        walker, runner = 0, 0
        while runner < len(chars):
  
            chars[walker] = chars[runner]
            count = 1
   
            while runner + 1 < len(chars) and chars[runner] == chars[runner+1]:
                runner += 1
                count += 1
   
            if count > 1:
                for c in str(count):
                    chars[walker+1] = c
                    walker += 1
            
   runner += 1
            walker += 1
        
        return walker



Report Page