Сначала подсчитайте частоты символов, затем найдите первый символ с частотой 1. Если такого нет, верните null; порядок первого прохода должен соответствовать исходной строке.
Определение первого неповторяющегося символа
Сначала подсчитайте частоты символов, затем найдите первый символ с частотой 1. Если такого нет, верните null; порядок первого прохода должен соответствовать исходной строке.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию firstUniqueChar(str), которая принимает строку и возвращает первый символ, встречающийся в ней только один раз. Если в строке нет символов с единственным вхождением, функция должна вернуть null.
console.log(firstUniqueChar("leetcode")); // 'l'
console.log(firstUniqueChar("aabbccdde")); // 'e'
console.log(firstUniqueChar("aabbcc")); // null
Ответ
Сначала подсчитайте частоты символов, затем найдите первый символ с частотой 1. Если такого нет, верните null; порядок первого прохода должен соответствовать исходной строке.
function firstUniqueChar(str) {
const counts = new Map();
for (const ch of str) counts.set(ch, (counts.get(ch) ?? 0) + 1);
for (const ch of str) if (counts.get(ch) === 1) return ch;
return null;
}
Оба прохода используют for...of, поэтому работают с Unicode-кодовыми точками, а не отдельными UTF-16 половинами. Регистр и пробелы учитываются. Сложные графемы из нескольких кодовых точек требуют отдельной сегментации. Время O(n), память O(k) для k различных символов.