Добавить в корзинуПозвонить
Найти в Дзене

Друзья, публикуем эталонное простое решение (O(n), один проход

Друзья, публикуем эталонное простое решение (O(n), один проход): def compress(s: str) -> str: if not s: return s res = [] count = 1 for i in range(1, len(s)): if s[i] == s[i - 1]: count += 1 else: res.append(s[i - 1] + str(count)) count = 1 # последний блок res.append(s[-1] + str(count)) compressed = "".join(res) return compressed if len(compressed) < len(s) else s 🧠 Суть решения: •идём по строке один раз •считаем подряд идущие символы •собираем результат в список (не строку — важно для скорости) •в конце сравниваем длины

В ответ на пост

Друзья, публикуем эталонное простое решение (O(n), один проход):

def compress(s: str) -> str:

if not s:

return s

res = []

count = 1

for i in range(1, len(s)):

if s[i] == s[i - 1]:

count += 1

else:

res.append(s[i - 1] + str(count))

count = 1

# последний блок

res.append(s[-1] + str(count))

compressed = "".join(res)

return compressed if len(compressed) < len(s) else s

🧠 Суть решения:

•идём по строке один раз

•считаем подряд идущие символы

•собираем результат в список (не строку — важно для скорости)

•в конце сравниваем длины