Поиск самого длинного общего префикса среди строк

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

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

Пример 1: Ввод: ["flower", "flow", "flight"] Вывод: "fl"

Пример 2: Ввод: ["dog", "cat"] Вывод: ""

Ответ

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

Реализация без многократного обрезания префикса:

def common_prefix(words):
    if not words:
        return ''
    limit = min(map(len, words))
    for index in range(limit):
        if any(word[index] != words[0][index] for word in words):
            return words[0][:index]
    return words[0][:limit]

Для ['flower', 'flow', 'flight'] получится 'fl', для ['dog', 'cat'] — ''. Наличие пустой строки сразу ограничивает длину префикса нулём. Сложность O(k·m), где k — число строк, m — минимальная длина.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее