Программа курса:

1.1 - Часть 1 1.2 - Часть 2 1.3 - Часть 3 1.4 - Часть 4 1.5 - Часть 5 1.6 - Часть 6 1.7 - Часть 7 1.8 - Часть 8 1.9 - Часть 9 1.10 - Часть 10 1.11 - Часть 11 1.12 - Часть 12
2.1 - Часть 1 2.2 - Часть 2 2.3 - Часть 3 2.4 - Часть 4 2.5 - Часть 5 2.6 - Часть 6
3.1 - Часть 1

Разбор задачи: Самый длинный общий префикс в списке

Предложенный нами код решения: 

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 ""
  • Пока текущая строка не начинается с префикса:
    1. Префикс уменьшается на один символ с конца (prefix[:-1]).
    2. Если префикс становится пустым, это значит, что общего префикса нет, и мы возвращаем "".

Этот процесс повторяется, пока мы не найдем общий префикс для текущей строки или пока префикс не исчезнет полностью.


5. Возврат результата:

return prefix
  • После завершения цикла возвращается окончательный общий префикс.

Пример работы функции

Вход: ["flower", "flow", "flight"]

  1. Начальный префикс: "flower".
  2. Сравнение с "flow":
    • Префикс "flower" не совпадает с началом "flow", поэтому он сокращается до "flow".
  3. Сравнение с "flight":
    • Префикс "flow" не совпадает с началом "flight", сокращаем до "flo", затем до "fl".
  4. Итоговый префикс: "fl".

Вход: ["dog", "racecar", "car"]

  1. Начальный префикс: "dog".
  2. Сравнение с "racecar":
    • Префикс сокращается до "", так как общего начала нет.
  3. Итоговый префикс: "".

Особенности решения

  1. Функция возвращает результат в случае пустого списка или отсутствия общего префикса.
  2. Алгоритм работает построчно, начиная с максимально возможного префикса (первой строки).
  3. Метод startswith используется для проверки совпадения строки с префиксом, что упрощает логику.

 

Перейти к следующему шагу

Возникли вопросы при прочтении лекции? Задайте вопрос в комментариях

Комментарии