Сравнивайте строки посимвольно до первого несовпадения, ограничившись длиной самой короткой строки. Для пустого массива результатом будет пустая строка.
Поиск самого длинного общего префикса среди строк
Сравнивайте строки посимвольно до первого несовпадения, ограничившись длиной самой короткой строки. Для пустого массива результатом будет пустая строка.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан массив строк. Требуется реализовать функцию, которая возвращает самый длинный префикс, одинаковый для всех элементов массива.
Пример 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 — минимальная длина.