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

Нормализуйте строки в отсортированный набор уникальных символов и верните исходную строку из единственной редкой группы.

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

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

Нормализуйте строки в отсортированный набор уникальных символов и верните исходную строку из единственной редкой группы.

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

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

Нормализуйте строки в отсортированный набор уникальных символов и верните исходную строку из единственной редкой группы.

Ниже регистр нормализуется toLowerCase, пробельные символы удаляются, Unicode приводится к NFC. Проверяется обещание условия: ровно одна отличающаяся строка.

function findDifferent(strings) {
  if (strings.length < 3) throw new Error('Нужно минимум три строки');
  const normalize = s => [...new Set(
    s.toLowerCase().normalize('NFC').replace(/\s/gu, '')
  )].sort().join('');
  const keys = strings.map(normalize);
  const counts = new Map();
  for (const key of keys) counts.set(key, (counts.get(key) ?? 0) + 1);
  if (counts.size !== 2 || ![...counts.values()].includes(strings.length - 1))
    throw new Error('Нарушено условие уникальности');
  return strings[keys.findIndex(key => counts.get(key) === 1)];
}

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

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

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

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

Подробнее