Статья Автор: Деникина Н.В., Деникин А.В.

Вопрос 24. Замены и метод split

01 Идея

Суть: мы заменяем символы и их комбинации так, чтобы в строке остались только «правильные» подстроки, разделённые пробелами. А потом разбиваем строку методом split() и находим самую длинную часть.

Шаг 1: replace()

Заменяем «правильные» комбинации на маркер (например, *)
Или вставляем пробелы между «неправильными» парами

Шаг 2: split() + max()

Разбиваем строку по пробелам
Находим самую длинную часть: max(s.split(), key=len)

💡 Когда использовать? Когда задачу трудно решить однопроходным алгоритмом, но легко свести к замене подстрок. Особенно хорошо работает для задач с парами символов (AB, «согласная + гласная» и т.д.)

02 Пример 1: цепочка из пар AB

Найти самую длинную подстроку, состоящую только из пар AB. Например, в строке XABABCABABABY это ABABAB (длина 6).

# Шаг 1: заменяем пары AB на звёздочку
s = s.replace("AB", "*")

# Шаг 2: заменяем всё что не * на пробел
for c in s:
    if c != '*':
        s = s.replace(c, " ")

# Шаг 3: split и max
print(len(max(s.split(), key=len)))
Попробуй · пошаговая замена
Строка
 
 
Нажми «Шаг» или «Запустить»
Скорость:

03 Пример 2: согласная + гласная

Буквы A, B, C, D, E, F. Гласные: A, E. Согласные: B, C, D, F. Найти самую длинную цепочку из пар «согласная + гласная».

# Шаг 1: унифицируем символы
for c in "BCDF": s = s.replace(c, "s")  # согласные → s
for c in "AE":   s = s.replace(c, "g")  # гласные → g

# Шаг 2: пара "sg" → звёздочка
s = s.replace("sg", "*")

# Шаг 3: всё лишнее → пробел, потом split
Попробуй · согласная + гласная
Строка (буквы A–F)
 
 
Нажми «Шаг» или «Запустить»
Скорость:

04 Пример 3: нет двух соседних P

Найти самую длинную подстроку, в которой нет двух соседних букв P. Вместо маркеров вставляем пробелы — они «разрезают» строку на части.

# Вставляем пробел между каждой парой PP
s = s.replace("PP", "P P")
s = s.replace("PP", "P P")  # дважды!

# Теперь split и max
sMax = max(s.split(), key=len)
print(len(sMax))
⚠️ Почему дважды? Потому что после первой замены остаются неразбитые пары. Например: PPPPPP PP PP — осталась пара! Второй вызов: P PP PPP P P P P
Попробуй · разрезание PP
Строка
 
 
Нажми «Шаг» или «Запустить»
Скорость:

 


Шпаргалка

Приём Описание
replace("AB","*") Заменяем «правильную» пару на маркер
Унификация символов Согласные → s, гласные → g, потом replace("sg","*")
replace("PP","P P") Разрезаем строку пробелами в «плохих» местах
Двойной replace Вызываем дважды, чтобы разбить тройки и более: PPP → P P P
max(s.split(), key=len) Самая длинная часть после разбиения по пробелам
key=len Сравниваем строки по длине, а не по алфавиту
Печать