Определить количество слов в строке за один проход

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

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

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

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

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

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

Условие

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

Пример ввода:

"Hello world from ChatGPT"

Ожидаемый результат:

4

Ответ

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

static int countWords(String text) {
    java.util.Objects.requireNonNull(text);
    int count = 0;
    boolean inWord = false;
    for (int i = 0; i < text.length();) {
        int cp = text.codePointAt(i);
        boolean separator = Character.isWhitespace(cp) || Character.isSpaceChar(cp);
        if (!separator && !inWord) count++;
        inWord = !separator;
        i += Character.charCount(cp);
    }
    return count;
}

Словом здесь считается любая последовательность непробельных символов; пунктуация отдельно не разбирается. Пустая строка даёт 0. Время O(n), дополнительная память O(1); массив после split не создаётся.

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

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

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

Подробнее