Longest Common Prefix - LeetCode
----- Условие ----- Требуется найти наибольший общий префикс для массива строк: ['flower', 'flow', 'flight'] -> 'fl'.
----- Решение ----- Используем "Горизонтальное сканирование". Необходимо взять первую строку в качестве префикса, провести посимвольное сравнение со второй, оставив только общую часть. Далее эта общая часть становится новым префиксом и сравнивается уже с третьей строкой и т.д. Сложность алгоритма по памяти O(1), сложность по времени O(S), где S - суммарная длина строк в массиве.
Стоит отметить, что для случая, когда первый элемент в какой-то из строк отличается, быстрее отработает "Вертикальное сканирование" (сложность аналогичная). При данном алгоритме сравниваются символы на одной позиции во всех строках.
----- Код ----- // Горизонтальное сканирование /** * @param {string[]} strs * @return {string} */ const longestCommonPrefix = function(strs) { let longestPrefix = '';
if (!strs.length) return '';
longestPrefix = strs[0];
for (let i = 1; i < strs.length; i++) { if (!longestPrefix.length) return '';
for (let j = 0; j < longestPrefix.length; j++) { if (longestPrefix[j] !== strs[i][j]) { longestPrefix = longestPrefix.slice(0, j); break; } } }
return longestPrefix; };
// Вертикальное сканирование /** * @param {string[]} strs * @return {string} */ const longestCommonPrefix = function(strs) { let longestPrefix = '';
if (!strs.length) return '';
for (let i = 0; i < strs[0].length; i++) { const currentSymbol = strs[0][i];
for (let str of strs) { if (currentSymbol !== str[i]) return longestPrefix; }
longestPrefix = strs[0].slice(0, i + 1); }
return longestPrefix; };