Разбор задачи "Смайлики", читать только тем, кто решил!
Во-первых, в этой задаче надо правильно понять условие, например, понять, что на тест ;:-()[]
ответ 1, т.к. эта строка содержит один смайлик — :-(
. Т.е. не страшно, если вокруг смайлика есть лишние символы, важно, что сам смайлик можно выделить.
Дальше эту задачу можно решать по-разному. Можно, конечно, идти по строке, искать двоеточие или точку с запятой, после нее искать минусы, после нее — одинаковые скобки. Это можно написать, но это не очень просто (хотя и не суперсложно).
Можно немного упростить решение, поняв, что не надо искать много одинаковых скобок, хватит и одной, т.к. если есть смайлик с кучей скобок, то если убрать все скобки, кроме последней, то он тоже останется смайликом.
Но можно и еще более упростить решение, сделав одно простое наблюдение. Если выкинуть из входного файла все минусы, то ответ не изменится! Действительно, смайлик без минусов — это тоже смайлик, и наоборот, если в смайлик без минусов вставить минусы, то получится все равно смайлик. Поэтому от выкидывания минусов не появится новых смайликов, а старые не пропадут.
Поэтому очень простое решение этой задачи — выкинем все минусы, а после этого посчитаем, сколько в строке встречается пар соседних символов таких, что первый из них — это : или ;, а второй — скобка.