01 Идея шаблона
Найти минимальную подстроку, где символ X встречается не менее K раз.
Шаблон 1 (предыдущий)
Не более K → ищем максимум
while count > k (нарушено)
Обновляем ПОСЛЕ while
Шаблон 2
Не менее K → ищем минимум
while count >= k (выполнено)
Обновляем ВНУТРИ while
💡 Принцип 1. Двигаем right вправо, пока условие НЕ выполнено
2. Когда выполнено (count ≥ K) — обновляем минимум и сужаем
3. Обновляем ответ внутри while, пока условие ещё выполняется
02 Пошаговый разбор
Строка ABXAXXAB, символ X, не менее K=2 раз. Нажимайте «Шаг».
Интерактивный разбор · шаблон 2
Нажмите «Шаг» или «Авто»
03 Код
def min_at_least_k(s, k):
left = 0
count_x = 0
min_len = float('inf')
for right in range(len(s)):
if s[right] == 'X':
count_x += 1
while count_x >= k: # пока ВЫПОЛНЕНО
min_len = min(min_len, right - left + 1) # ВНУТРИ while
if s[left] == 'X':
count_x -= 1
left += 1
return min_len
⚠️ Ключевое отличие от Шаблона 1 while count >= k — сужаем ПОКА выполнено (не нарушено!).
Обновляем min_len ВНУТРИ while — ловим минимум на каждом сужении.
04 Песочница
Введите свою строку, целевой символ и K.
Песочница · своя задача
Нажмите «Применить», затем «Шаг»
💡 Нажмите на строку теста ниже — она подставится автоматически
05 Тесты
Попробуй · тестирование
ABXAXXAB X ≥ 2 Ответ: ?
XAXBXAXBXA X ≥ 3 Ответ: ?
AAXBBXCCX X ≥ 1 Ответ: ?
XXXXX X ≥ 3 Ответ: ?
ABCABC X ≥ 1 Ответ: ?
06 Сравнение шаблонов
| |
Шаблон 1 |
Шаблон 2 |
| Условие |
Не более K |
Не менее K |
| Ищем |
Максимум |
Минимум |
| while |
count > k |
count >= k |
| Обновление |
ПОСЛЕ while |
ВНУТРИ while |
| Начальное значение |
max_len = 0 |
min_len = ∞ |