Считайте переходы из разделителя в непробельный символ. Флаг «внутри слова» позволяет обработать повторные пробелы, начало и конец строки за один проход.
Определить количество слов в строке за один проход
Считайте переходы из разделителя в непробельный символ. Флаг «внутри слова» позволяет обработать повторные пробелы, начало и конец строки за один проход.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию, которая подсчитывает число слов в заданной строке, проходя её только один раз.
Пример ввода:
"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 не создаётся.