Как удалить символ после серии заданной длины

Храните предыдущий символ и длину текущей серии. При достижении k увеличьте индекс дополнительно и обнулите состояние серии; удалённый символ не участвует в следующем подсчёте.

Короткий ответ

Что ответить на собеседовании

Храните предыдущий символ и длину текущей серии. При достижении k увеличьте индекс дополнительно и обнулите состояние серии; удалённый символ не участвует в следующем подсчёте.

Подробный разбор

Ответ с пояснениями

Условие

Идите по исходной строке слева направо. После каждых k одинаковых подряд символов сохраните эти k символов, пропустите один следующий символ, если он есть, и сбросьте счётчик. k — положительное целое. Например, 'aaabcccd' при k=3 превращается в 'aaaccc'.

Ответ

Храните предыдущий символ и длину текущей серии. При достижении k увеличьте индекс дополнительно и обнулите состояние серии; удалённый символ не участвует в следующем подсчёте.

Решение для Unicode code points:

function removeAfterRun(text, k) {
  if (!Number.isInteger(k) || k < 1) throw new Error('Invalid k');
  const chars = [...text], out = [];
  let previous, count = 0;
  for (let i = 0; i < chars.length; i++) {
    const ch = chars[i];
    count = ch === previous ? count + 1 : 1;
    previous = ch;
    out.push(ch);
    if (count === k) { i++; count = 0; previous = undefined; }
  }
  return out.join('');
}

Время и память O(n). Составные графемы требуют отдельной сегментации.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее