Сколько слов на доске

тема: Строки · уровень: базовый

Условие

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

Считай, сколько слов получилось в строке. Словом считается максимальный подряд идущий фрагмент не из пробелов.

Формат ввода

Одна строка длины от 1 до 2000 символов. В строке могут быть пробелы и любые непробельные символы.

Формат вывода

Выведите одно целое число — количество слов в строке.

Ограничения

Пример

Ввод:

Математика  физика информатика

Вывод:

3

Как решать — идея подхода

Приём: Однопроходный автомат (флаг «в слове»)

Ключевое наблюдение: слово — это максимальный подряд идущий кусок НЕ из пробелов. Значит, слова начинаются ровно в тех позициях, где текущий символ не пробел, а предыдущий был пробелом (или это самый первый символ строки).

Удобный приём — пройти строку один раз, держа флаг in_word: находимся ли мы сейчас внутри слова. Как только встречаем непробельный символ и при этом in_word == False, значит началось новое слово — увеличиваем ответ и ставим in_word = True. Если встречаем пробел — выходим из слова (in_word = False).

План:

Мини-сниппет логики старта слова: if ch != ' ' and not in_word: cnt += 1; in_word = True

Сложность: O(n) по времени и O(1) по памяти, где n — длина строки.

Частая ошибка: делать s.split(' ') — при нескольких пробелах подряд появятся пустые элементы, и их легко случайно посчитать как слова. Если хочется через split, то безопаснее s.split() без аргумента, но однопроходный вариант надёжнее и не зависит от деталей.

Разберись руками

Есть строка: «Математика␠␠физика␠информатика». Слова — это куски из НЕ-пробелов, между ними могут быть даже несколько пробелов. Нужно посчитать, сколько таких кусков получилось.

Идея: Идём по строке слева направо и считаем моменты, когда начинается новый «кусок без пробелов»: текущий символ не пробел, а слева был пробел или это самое начало строки. Количество таких стартов и есть число слов.

Решить задачу с автопроверкой на Python →

Куда дальше