Цель решения: понять по шагам, как посчитать точно отдельно стоящие слова Иван в произвольном тексте, без учёта регистра и без подсчета части слова (например, Иванов не считается). Также учтём условия проверки (.lower() и .count()).
Подход (пошагово):
- Привести входной текст к нижнему регистру (используем .lower()).
- Заменить все символы, которые не являются русскими буквами, на пробелы. Это позволяет трактовать знаки препинания как разделители слов.
- Разбить строку на слова по пробелам и отбросить пустые элементы.
- Посчитать количество слов, равных "иван", с помощью метода .count() на списке слов. Это обеспечивает точное совпадение слова, а не вхождение части слова.
Пример реализации на Python (со строгим использованием .lower() и .count()):
import re
text = input() # входной текст (одна строка) lower_text = text.lower()
заменить все не-русские буквы на пробелы (оставляем а-я и ё)
normalized = re.sub(r'[^а-яё]', ' ', lower_text)
получить список слов
words = [w for w in normalized.split() if w]
посчитать точные совпадения слова "иван"
count = words.count('иван')
print(count)
Пояснения по коду:
- re.sub(r'[^а-яё]', ' ', lower_text) заменяет любые символы, не являющиеся кириллицей (включая пробелы, знаки препинания, цифры и т. д.), на пробелы. Это позволяет корректно отделять слова, и при этом не считать "(Иванов)" как слово "иван".
- words.count('иван') подсчитывает число элементов списка, равных exactly "иван" (после приведения к нижнему регистру и разбиения на слова).
Примеры:
- Ввод: "Иван, иванов! Иван." -> слова: ['иван', 'иванов', 'иван']; count = 2.
- Ввод: "Иван ивана, ИВАН." -> слова: ['иван', 'ивана', 'иван']; count = 2.
- Ввод: "ИвАнОв и Иван" -> слова: ['иванов', 'иван']; count = 1.
Сложность:
- Время: O(n), где n — длина входной строки (нужно пройти по символам и затем разобрать слова).
- Память: O(k), где k — количество слов после разбиения.
Если хочешь, могу адаптировать код под другую среду (например, без модуля re) или показать альтернативу на другом языке.