Напишите функцию для сравнения двух строк по составу символов с учетом количества
Что проверяют
Алгоритм тут школьный, поэтому смотрят не на него, а на то, как вы обращаетесь со строкой в Swift и проговариваете ли условия до кода. String в Swift это коллекция расширенных кластеров графем, а не массив байтов, и по ответу видно, помните ли вы это, когда начинаете считать символы.
Как отвечать
Сначала уточните договорённости: учитываем ли регистр, пробелы и знаки препинания, что считаем одним символом. Потом предложите словарь частот за один проход.
func sameCharacterCounts(_ a: String, _ b: String) -> Bool {
guard a.count == b.count else { return false }
var counts: [Character: Int] = [:]
for ch in a { counts[ch, default: 0] += 1 }
for ch in b {
guard let left = counts[ch], left > 0 else { return false }
counts[ch] = left - 1
}
return true
}Дальше сами назовите оценки: время O(n), память O(k) по числу различных символов. Вариант в одну строку a.sorted() == b.sorted() короче, но это O(n log n) и два лишних массива, и честнее сказать об этом самому, чем ждать вопроса.
Сильный ход: упомянуть нормализацию. Буква с диакритикой бывает записана одним кодепоинтом или парой, поэтому перед сравнением строки приводят через precomposedStringWithCanonicalMapping, а регистр снимают lowercased().
Где спотыкаются
Считают count дешёвой операцией. У String это проход по всей строке, а не чтение поля, поэтому вызов внутри цикла превращает решение в квадратичное. По той же причине в Swift нет обращения по целочисленному индексу, и попытка написать s[i] на доске выдаёт человека, который пишет на Swift как на C.
Уменьшают счётчик второй строки без проверки и возвращают результат по признаку «все значения нули». При равных длинах это ещё работает, но стоит убрать проверку длин, и функция начинает врать. Надёжнее прерываться сразу, как только символа не хватило.
Молчат про Unicode и регистр. Эмодзи из нескольких скаляров, составные символы, строки на разных языках: если не спросить у интервьюера, что считается символом, легко решить не ту задачу. Отдельно стоит проверить пустые строки и строки разной длины.