Получение последовательности без соседних дубликатов

Добавляйте очередной элемент, только если результат пуст или его последний элемент отличается. Повторы, разделённые другими значениями, сохраняются.

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

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

Добавляйте очередной элемент, только если результат пуст или его последний элемент отличается. Повторы, разделённые другими значениями, сохраняются.

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

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

Условие

Необходимо реализовать функцию, принимающую произвольный набор элементов (строку или массив) и возвращающую новый массив, в котором подряд идущие одинаковые значения удалены, а порядок остальных элементов сохраняется.

// Примеры:
// extractUnique('AAAABBBCCDAABBB') => ['A', 'B', 'C', 'D', 'A', 'B']
// extractUnique('ABBCcAD') => ['A', 'B', 'C', 'c', 'A', 'D']
// extractUnique([1,2,2,3,3]) => [1,2,3]

function extractUnique(seq) {}

Ответ

Добавляйте очередной элемент, только если результат пуст или его последний элемент отличается. Повторы, разделённые другими значениями, сохраняются.

function extractUnique(sequence) {
  const result = [];
  for (const value of sequence) {
    if (!result.length || result[result.length - 1] !== value) result.push(value);
  }
  return result;
}

Сравнение чувствительно к регистру, поэтому C и c остаются отдельно. Используется строгое равенство: NaN не совпадает сам с собой, а объекты равны только при общей ссылке. Строка обходится по Unicode-кодовым точкам. Время O(n), память O(n) для результата; Set здесь не подходит, поскольку удалил бы и несоседние повторы.

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

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

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

Подробнее