В задаче нужно аккуратно промоделировать процесс набора текста. Для начала заметим, что набор символа требует нажатия как минимум одной клавиши, но иногда еще нужно нажать клавишу shift. Таким образом ответ будет равен сумме длины строки и числа нажатий клавиши shift.
Для удобства подсчета нажатий можно поддерживать дополнительную логическую переменную, которая хранит информациюю нажат shift в данный момент или нет. Тогда существует три класса символов:
- Строчные буквы латинского алфавита, «.», «,» — shift не должен быть нажат. Заметим, что отпустить клавишу не требует нажатия клавиши. Поэтому «бесплатно» инвертируем значение соответвующей логической переменной, если нужно.
- Заглавные буквы латинского алфавита, «!», «?», «$», «(» и «)» — shift должен быть нажат. Если в данный момент shift не нажат, добавляем единицу к ответу, а затем инвертируем значение соответвующей логической переменной.
- Символ пробела — не делаем ничего.
Остается пройти по строке и обработать класс каждого символа.