Сначала посчитайте частоты символов, затем пройдите строку слева направо и верните индекс первого с частотой 1. Если такого нет, результат −1.
Определение индекса первого уникального символа в строке
Сначала посчитайте частоты символов, затем пройдите строку слева направо и верните индекс первого с частотой 1. Если такого нет, результат −1.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дана строка s. Необходимо найти первый символ, который встречается только один раз, и вернуть его индекс. Если в строке нет символов, удовлетворяющих условию, следует вернуть -1.
Примеры:
val s = "hutrihbp" // (u) result = 1
val s = "abcabce" // (e) result = 6
val s = "uuee" // () result = -1
Ответ
Сначала посчитайте частоты символов, затем пройдите строку слева направо и верните индекс первого с частотой 1. Если такого нет, результат −1.
fun firstUniqueIndex(s: String): Int {
val counts = HashMap<Char, Int>()
for (ch in s) counts[ch] = (counts[ch] ?: 0) + 1
return s.indexOfFirst { counts[it] == 1 }
}
Время O(n), память O(k) для разных Char. Для примеров ответ 1, 6 и −1. Здесь индекс и символ понимаются как Kotlin Char/UTF-16, что подходит приведённым латинским строкам. Для emoji и графем нужен отдельно согласованный способ сегментации и индексации.