Я согласен, что O(N)
- лучшее, что вы можете сделать.
Я сделал упрощение для вашей программы. Вам не нужно использовать исключение try и raise здесь.
input_string = "foobaarfoooobaaaarfo"
count_dict = {}
for char in input_string:
count_dict[char] = count_dict.get(char, 0) + 1
print(count_dict)