Вариант задачи на проверку строки

Пытаюсь самостоятельно изучать Python, прохожу нарешиваю задачи. Столкнулся с проблемой при решении следующей задачи:

Строка считается действительной, если все символы в строке встречаются одинаковое количество раз. Также допустимо, если для выполнения этого условия будет достаточно удалить 1 символ из строки. Напишите функцию, которая возвращает True, если строка действительна и False, если нет.

abc -> True

abcc -> True

abccc -> False

Зашел в тупик - прошу помощи, как пошагово пройти по этой задаче, что и для чего нужно сделать? Какие разделы документации разобрать? Использовать ли тут модуль collections (Counter) для подсчета значений, использовать ли словарь из полученных значений? Или может здесь пойти через all()/any()? Хочется разобраться в этой задаче пошагово, без готового кода.

Спасибо за ваши ответы!

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

from collections import Counter

mlst = []

mystrg = input()
x = Counter(mystrg)
elements = x.values()
for item in elements:
    mlst.append(item)
if sum(mlst)//min(mlst) == len(mlst):
    print(True)
elif sum(mlst)-1//min(mlst) == len(mlst):
    print(True)
else:
    print(False)

Понимаю, что код кривой, как-то он сработал


Ответы (2 шт):

Автор решения: MBo

Сounter вполне подойдёт, после его заполнения значения счётчиков останется сгруппировать (подсчитать)

Если группа одна, то готово.

Если группы две, и одиночное значение равно единице или значению другой группы + 1, то тоже хорошо.

→ Ссылка
Автор решения: strawdog

можно еще группировку попробовать:

from itertools import groupby
s = "abcdcc"
res = all([len(list(x))<=2 for _, x in groupby(sorted(s))]) # False
s = "abcdc"
res = all([len(list(x))<=2 for _, x in groupby(sorted(s))]) # True
→ Ссылка