Подсчёт количества символов в массиве строк

Считайте Unicode-кодовые точки через utf8.RuneCountInString, а не len: кириллица занимает несколько байт на один символ.

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

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

Считайте Unicode-кодовые точки через utf8.RuneCountInString, а не len: кириллица занимает несколько байт на один символ.

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

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

Условие

Требуется реализовать функцию, которая:

  • Принимает массив (slice) строк, в которых могут встречаться латинские буквы, кириллические символы и цифры.
  • Для каждой строки возвращает количество её символов.
  • Корректно обрабатывает пустые строки и строки, содержащие смешанные типы символов.

Функция должна работать независимо от того, какие из перечисленных наборов символов присутствуют в конкретной строке.

Ответ

Считайте Unicode-кодовые точки через utf8.RuneCountInString, а не len: кириллица занимает несколько байт на один символ.

Реализация:

import "unicode/utf8"

func countCharacters(values []string) []int {
    counts := make([]int, len(values))
    for i, value := range values {
        counts[i] = utf8.RuneCountInString(value)
    }
    return counts
}

Для ["abc", "привет", "Aя3", ""] результат [3, 6, 3, 0]. Сложность линейна по суммарной длине строк в байтах. Это число рун, не графем: составная буква с отдельным диакритическим знаком может считаться как две. Некорректный UTF-8 требует отдельной политики валидации.

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

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

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

Подробнее