← Назад к вопросам
Подсчет слов в строке
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
- Разные пробелы (табуляция, новые строки) - если требуется
- Очень длинная строка - проверить производительность
Рекомендация для собеседования
- Начните с простого: используйте встроенный split()
- Затем предложите альтернативу: итераторный подход с O(1) памятью
- Обсудите trade-offs: простота кода vs минимум памяти
- Обсудите граничные случаи: это показывает глубокое понимание
Для реального использования всегда выбирайте встроенные функции split() - они оптимизированы и легче в поддержке.