Программа курса:
Разбор задачи: Самый длинный общий префикс в списке
Предложенный нами код решения:
def longestprefix(s):
# Проверяем наличие строк в списке
if not s:
return ""
# Берем первую строку как эталонный префикс
prefix = s[0]
# Проходим по остальным строкам
for string in s[1:]:
# Уменьшаем префикс, пока он не совпадет с началом текущей строки
while not string.startswith(prefix):
prefix = prefix[:-1]
if not prefix: # Если префикс стал пустым, возвращаем ""
return ""
return prefix
1. Проверка пустого списка:
if not s:
return ""
- Если список пустой, функция сразу возвращает пустую строку. Это предотвращает дальнейшую обработку и исключения.
2. Инициализация эталонного префикса:
prefix = s[0]
- Берем первую строку из списка
s
как начальный "эталонный" префикс. Мы будем последовательно сравнивать этот префикс с остальными строками.
3. Цикл по строкам списка:
for string in s[1:]:
- Цикл начинается со второй строки (поскольку первая уже выбрана как префикс). На каждой итерации мы проверяем текущую строку на совпадение с текущим префиксом.
4. Сравнение и сокращение префикса:
while not string.startswith(prefix):
prefix = prefix[:-1]
if not prefix:
return ""
- Пока текущая строка не начинается с префикса:
- Префикс уменьшается на один символ с конца (
prefix[:-1]
). - Если префикс становится пустым, это значит, что общего префикса нет, и мы возвращаем
""
.
- Префикс уменьшается на один символ с конца (
Этот процесс повторяется, пока мы не найдем общий префикс для текущей строки или пока префикс не исчезнет полностью.
5. Возврат результата:
return prefix
- После завершения цикла возвращается окончательный общий префикс.
Пример работы функции
Вход: ["flower", "flow", "flight"]
- Начальный префикс:
"flower"
. - Сравнение с
"flow"
:- Префикс
"flower"
не совпадает с началом"flow"
, поэтому он сокращается до"flow"
.
- Префикс
- Сравнение с
"flight"
:- Префикс
"flow"
не совпадает с началом"flight"
, сокращаем до"flo"
, затем до"fl"
.
- Префикс
- Итоговый префикс:
"fl"
.
Вход: ["dog", "racecar", "car"]
- Начальный префикс:
"dog"
. - Сравнение с
"racecar"
:- Префикс сокращается до
""
, так как общего начала нет.
- Префикс сокращается до
- Итоговый префикс:
""
.
Особенности решения
- Функция возвращает результат в случае пустого списка или отсутствия общего префикса.
- Алгоритм работает построчно, начиная с максимально возможного префикса (первой строки).
- Метод
startswith
используется для проверки совпадения строки с префиксом, что упрощает логику.