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; };