Бесплатный урок с нашим репетитором!

Узнать подробнее

Новая Школа - онлайн-школа подготовки к ЕГЭ
При поддержке
Посмотреть все вопросы нейросети
Бесплатный пробный урок с репетитором

Узнай больше про репетиторов Новой Школы и запишись на бесплатный пробный урок. Мы проверим твой уровень знаний и составим план обучения по любому предмету и классу

Вопрос от Анонимного юзера 23 октября 2025 12:13

Ограничение по времени: 1 секунда Ограничение по памяти: 256 мегабайт Вы разрабатываете препроцессор текста для языковой модели. Пользователи иногда тянут буквы, например: сооoool, уаааау. Перед обучением модели и при обработке пользовательских сообщений такие повторения нужно нормализовать: каждая подряд идущая серия одинаковых символов должна иметь длину не больше К. По заданным К и строке S (состоящей из латинских букв) получите строку S', в которой длина каждой максимальной серии одинаковых символов не превосходит К. Не меняйте порядок символов и не удаляйте серии полностью. Формат входных данных Первая строка содержит натуральное число К > 1. Вторая строка содержит строку S из латинских букв (A…Z, a…z). Формат выходных данных Выведите исправленную строку.

Ответ нейросети

23 октября 2025 12:13

Задача: дано число K (>1) и строка S из латинских букв. Нужно получить строку S', в которой любая максимальная последовательность одинаковых символов имеет длину не более K. Порядок символов не меняем, полностью удалять серии нельзя — просто обрезаем их до K.

Пояснение к подходу

  • Пройдем по строке S один раз и будем строить результат постепенно.
  • Будем держать текущий символ и его длину в текущей последовательности.
  • При встрече нового символа начинаем новую последовательность и добавляем первый символ новой серии в выход.
  • При встрече того же символа увеличиваем длину последовательности и добавляем символ в выход только если длина последовательности не превысила K.
  • Так каждая серия будет состоять не более чем из K одинаковых символов.

Алгоритм (псевдокод)

  • считать K
  • считать S
  • если S пустая, вернуть ""
  • будет результат как массив символов: res = []
  • cur = S[0]
  • count = 1
  • положить cur в res
  • для каждого ch в S[1:]:
    • если ch == cur:
      • count += 1
      • если count <= K: добавить ch в res
    • иначе:
      • cur = ch
      • count = 1
      • добавить ch в res
  • вернуть строку из res

Сложность

  • Временная: O(n), где n = длина S
  • Память: O(n) на выходную строку (и константные доп. переменные)

Пример

  • Ввод: K = 2, S = "aaabbbaa"
  • Обработка даст: "aabbb"? Нет: разберем по шагам
    • "aa" (первый пакет 'a' обрезан до 2) → "aa"
    • затем "bbb" → обрезано до "bb" → "aabb"
    • затем "aa" (два 'a') → добавляем "aa" → "aabbaa"
  • Вывод: "aabbaa"

Код на Python (рабочий пример) def normalize_runs(K, S): if not S: return "" res = [] cur = S[0] count = 1 res.append(cur) for ch in S[1:]: if ch == cur: count += 1 if count <= K: res.append(ch) else: cur = ch count = 1 res.append(ch) return "".join(res)

Пример использования

K = 2

S = "aaabbbaa"

print(normalize_runs(K, S)) # -> "aabbaa"

Советы по тестированию

  • Тестируйте границы: K = 2, K = 10; строки без повторов; строки, где один длинный повтор больше K; пустая строка.
  • Примеры:
    • K=3, S="aaabbbccc" -> "aaabbbccc"
    • K=2, S="aaabbbaaa" -> "aabb aa"? точнее: "aabb aaa" без пробелов: "aabb aa"? В точности: "aabb aa" → без пробелов: "aabb aa" неправильно. Правильный результат: "aabb aa" слитно = "aabbaa".
    • K=2, S="abcde" -> "abcde" (нет повторов длиннее 2)

Если хочешь, могу адаптировать решение под другой язык программирования или привести пошаговый разбор на конкретном примере.

Задай свой вопрос

Напиши любую задачу или вопрос, а нейросеть её решит

Похожие вопросы 15

Бесплатно Мобильное приложение ГДЗ
Мобильное приложение ГДЗ

Задавай вопросы искуcственному интеллекту текстом или фотографиями в приложении на iPhone или Android

qr-codegoogle-playapp-store

Саша — ассистент в телеграмме

Ограничение по времени: 1 секунда Ограничение по памяти: 256 мегабайт Вы разрабатываете препроцессор текста для языковой модели. Пользователи иногда тянут буквы, например: сооoool, уаааау. Перед обучением модели и при обработке пользовательских сообщений такие повторения нужно нормализовать: каждая подряд идущая серия одинаковых символов должна иметь длину не больше К. По заданным К и строке S (состоящей из латинских букв) получите строку S', в которой длина каждой максимальной серии одинаковых символов не превосходит К. Не меняйте порядок символов и не удаляйте серии полностью. Формат входных данных Первая строка содержит натуральное число К > 1. Вторая строка содержит строку S из латинских букв (A…Z, a…z). Формат выходных данных Выведите исправленную строку.
Задача: дано число K (>1) и строка S из латинских букв. Нужно получить строку S', в которой любая максимальная последовательность одинаковых символов имеет длину не более K. Порядок символов не меняем, полностью удалять серии нельзя — просто обрезаем их до K. Пояснение к подходу - Пройдем по строке S один раз и будем строить результат постепенно. - Будем держать текущий символ и его длину в текущей последовательности. - При встрече нового символа начинаем новую последовательность и добавляем первый символ новой серии в выход. - При встрече того же символа увеличиваем длину последовательности и добавляем символ в выход только если длина последовательности не превысила K. - Так каждая серия будет состоять не более чем из K одинаковых символов. Алгоритм (псевдокод) - считать K - считать S - если S пустая, вернуть "" - будет результат как массив символов: res = [] - cur = S[0] - count = 1 - положить cur в res - для каждого ch в S[1:]: - если ch == cur: - count += 1 - если count <= K: добавить ch в res - иначе: - cur = ch - count = 1 - добавить ch в res - вернуть строку из res Сложность - Временная: O(n), где n = длина S - Память: O(n) на выходную строку (и константные доп. переменные) Пример - Ввод: K = 2, S = "aaabbbaa" - Обработка даст: "aabbb"? Нет: разберем по шагам - "aa" (первый пакет 'a' обрезан до 2) → "aa" - затем "bbb" → обрезано до "bb" → "aabb" - затем "aa" (два 'a') → добавляем "aa" → "aabbaa" - Вывод: "aabbaa" Код на Python (рабочий пример) def normalize_runs(K, S): if not S: return "" res = [] cur = S[0] count = 1 res.append(cur) for ch in S[1:]: if ch == cur: count += 1 if count <= K: res.append(ch) else: cur = ch count = 1 res.append(ch) return "".join(res) # Пример использования # K = 2 # S = "aaabbbaa" # print(normalize_runs(K, S)) # -> "aabbaa" Советы по тестированию - Тестируйте границы: K = 2, K = 10; строки без повторов; строки, где один длинный повтор больше K; пустая строка. - Примеры: - K=3, S="aaabbbccc" -> "aaabbbccc" - K=2, S="aaabbbaaa" -> "aabb aa"? точнее: "aabb aaa" без пробелов: "aabb aa"? В точности: "aabb aa" → без пробелов: "aabb aa" неправильно. Правильный результат: "aabb aa" слитно = "aabbaa". - K=2, S="abcde" -> "abcde" (нет повторов длиннее 2) Если хочешь, могу адаптировать решение под другой язык программирования или привести пошаговый разбор на конкретном примере.