Задача: Сжатие строки
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