← Назад к вопросам

Подсчет слов в строке

2.0 Middle🔥 121 комментариев
#Теория тестирования

Условие

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

Пример

Вход: "Hello World Test" Выход: 3

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение

Анализ задачи

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

  • Пустая строка
  • Строка только с пробелами
  • Несколько подряд идущих пробелов
  • Пробелы в начале/конце строки

Решение 1: Простое разделение (Python)

def countWords(s: str) -> int:
    return len(s.split())

Это лучшее решение для Python - автоматически обрабатывает множественные пробелы и пробельные символы.

Решение 2: Явное разделение

def countWords(s: str) -> int:
    words = s.split(" ")
    count = 0
    for word in words:
        if word:
            count += 1
    return count

Этот подход более явный, нужна проверка на пустые строки.

Решение 3: Итераторная версия (O(1) память)

def countWords(s: str) -> int:
    count = 0
    in_word = False
    for char in s:
        if char != " ":
            if not in_word:
                count += 1
                in_word = True
        else:
            in_word = False
    return count

Преимущество: минимум дополнительной памяти.

Решение 4: Java реализация

public class Solution {
    public static int countWords(String s) {
        String trimmed = s.trim();
        if (trimmed.isEmpty()) return 0;
        return trimmed.split("\s+").length;
    }
}

Решение 5: JavaScript

function countWords(s) {
    return s.trim().split(/\s+/).filter(w => w).length;
}

Тестовые случаи

assert countWords("Hello World Test") == 3
assert countWords("  Hello  World  ") == 2
assert countWords("") == 0
assert countWords(" ") == 0
assert countWords("SingleWord") == 1
assert countWords("  Multiple   Spaces  Between  ") == 3

Сравнение подходов

ПодходСложность времяСложность памятьИспользование
split()O(n)O(n)На практике
Явное разделениеO(n)O(n)Когда нужна ясность
ИтераторнаяO(n)O(1)На собеседовании

Что проверять при тестировании

  • Пустая строка - должна вернуть 0
  • Только пробелы - должна вернуть 0
  • Несколько пробелов между словами - считать правильно
  • Пробелы в начале/конце - игнорировать
  • Одно слово - вернуть 1
  • Разные пробелы (табуляция, новые строки) - если требуется
  • Очень длинная строка - проверить производительность

Рекомендация для собеседования

  1. Начните с простого: используйте встроенный split()
  2. Затем предложите альтернативу: итераторный подход с O(1) памятью
  3. Обсудите trade-offs: простота кода vs минимум памяти
  4. Обсудите граничные случаи: это показывает глубокое понимание

Для реального использования всегда выбирайте встроенные функции split() - они оптимизированы и легче в поддержке.

Подсчет слов в строке | PrepBro