Используйте скользящее окно: нужное число замен равно длине окна минус частота самой частой буквы.
LeetCode #424 — Дана строка из заглавных английских букв и число k. За не более чем k замен найти длину самой длинной подстроки, которую можно сделать состоящей из одинаковых символов.
Используйте скользящее окно: нужное число замен равно длине окна минус частота самой частой буквы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте скользящее окно: нужное число замен равно длине окна минус частота самой частой буквы.
Когда замен требуется больше k, сдвигайте левую границу. Для фиксированного алфавита из 26 букв можно пересчитывать максимум без усложнения доказательства.
function characterReplacement(s, k) {
const counts = Array(26).fill(0);
let left = 0, best = 0;
for (let right = 0; right < s.length; right++) {
counts[s.charCodeAt(right) - 65]++;
while (right - left + 1 - Math.max(...counts) > k) {
counts[s.charCodeAt(left++) - 65]--;
}
best = Math.max(best, right - left + 1);
}
return best;
}
Вход соответствует условию: A–Z и неотрицательное целое k. Время O(26n), то есть O(n) для данного алфавита, память O(26).