Самый длинный общий префикс
Строки, 2D-массивы, Adhoc
Введение:
При работе с массивами строк часто можно столкнуться с ситуациями, когда необходимо найти среди них самый длинный общий префикс. В этом сообщении блога мы рассмотрим решение JavaScript для эффективного решения этой проблемы. Мы шаг за шагом пройдемся по коду, обсудим его временную и пространственную сложность и предоставим образец тестового примера для демонстрации его функциональности.
Проблема:
Учитывая массив строк, мы хотим найти самый длинный общий префикс, который является общим для всех строк.
Решение.
Для решения этой проблемы мы воспользуемся простым и оптимизированным подходом. Вот фрагмент кода:
/** * @param {string[]} strs * @return {string} */ var longestCommonPrefix = function(strs) { let commonPrefix = ''; for(let i = 0; i < strs[0].length; i++){ let char = strs[0][i]; for(let str of strs){ if(i >= str.length || char !== str[i]){ return commonPrefix } } commonPrefix += char; } return commonPrefix; };
Пошаговое объяснение:
- Начнем с проверки, пуст ли входной массив
strs
. Если да, то среди строк нет общего префикса, поэтому мы возвращаем пустую строку. - Затем мы инициализируем пустую строку с именем
commonPrefix
для хранения общего префикса, который мы будем создавать. - Мы используем цикл
for
для перебора каждого символа первой строки массива (strs[0]
). Этот цикл будет нашей основой для сравнения. - Внутри этого цикла мы извлекаем текущий символ (
char
) из первой строки с индексомi
. - Мы используем другой цикл, цикл
for...of
, для перебора каждой строки в массиве (str
) и сравнения ее символа по индексуi
с символомchar
, извлеченным из первой строки. - Если в какой-то момент символы не совпадают или мы достигли конца текущей строки, мы возвращаем найденное на данный момент
commonPrefix
. - Если все символы в текущей позиции одинаковы во всех строках, мы добавляем
char
кcommonPrefix
. - Наконец, мы возвращаем
commonPrefix
после завершения выполнения обоих циклов.
Временная сложность.
Временная сложность этого решения определяется длиной самого длинного общего префикса. В худшем случае мы перебираем все символы самой короткой строки массива (которая является первой строкой). Пусть n
— длина самой короткой строки, а m
— количество строк в массиве. Временная сложность равна O(n * m), где n
— длина самой короткой строки, а m
— количество строк.
Пространственная сложность:
Пространственная сложность равна O(n), где n
— длина самого длинного общего префикса. Мы используем дополнительное пространство для хранения строки commonPrefix
.
Вывод:
В этой записи блога мы рассмотрели эффективное решение JavaScript для поиска самого длинного общего префикса среди массива строк. Мы обсудили пошаговый подход, проанализировали его временную и пространственную сложность и предоставили пример тестового примера, иллюстрирующего его функциональность. Это решение обеспечивает оптимизированный способ решения этой распространенной проблемы программирования.