Нормализуйте строки в отсортированный набор уникальных символов и верните исходную строку из единственной редкой группы.
Дан массив строк длиной не менее трёх. Все строки, кроме одной, эквивалентны по составу уникальных символов без учёта порядка, регистра, пробелов и повторов. Найдите и верните отличающуюся исходную строку.
Нормализуйте строки в отсортированный набор уникальных символов и верните исходную строку из единственной редкой группы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Нормализуйте строки в отсортированный набор уникальных символов и верните исходную строку из единственной редкой группы.
Ниже регистр нормализуется 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, поэтому возвращается исходное написание. Для языка с особыми правилами сравнения регистра нормализацию уточняют отдельно.