484просмотров
5.4%от подписчиков
15 марта 2026 г.
statsScore: 532
Задача: 1062. Longest Repeating Substring
Сложность: medium Дана строка s. Вернуть длину самой длинной повторяющейся подстроки. Если повторяющаяся подстрока отсутствует, вернуть 0. Пример:
Input: s = "abcd"
Output: 0
Explanation: There is no repeating substring. 👨💻 Алгоритм: 1⃣Перемещайте скользящее окно длиной L по строке длиной N. 2⃣Проверьте, находится ли строка в скользящем окне в хэш-наборе уже виденных строк. Если да, то повторяющаяся подстрока находится здесь. Если нет, сохраните строку из скользящего окна в хэш-наборе. 3⃣Очевидный недостаток этого подхода — большое потребление памяти в случае длинных строк. 😎 Решение:
class Solution { search(L, n, S) { const seen = new Set(); for (let start = 0; start <= n - L; ++start) { const tmp = S.substring(start, start + L); if (seen.has(tmp)) return start; seen.add(tmp); } return -1; } longestRepeatingSubstring(S) { const n = S.length; let left = 1, right = n; while (left <= right) { const L = left + Math.floor((right - left) / 2); if (this.search(L, n, S) !== -1) { left = L + 1; } else { right = L - 1; } } return left - 1; }
} Ставь 👍 и забирай 📚 Базу знаний