Вариант задачи на проверку строки
Пытаюсь самостоятельно изучать 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 шт):
Сounter вполне подойдёт, после его заполнения значения счётчиков останется сгруппировать (подсчитать)
Если группа одна, то готово.
Если группы две, и одиночное значение равно единице или значению другой группы + 1, то тоже хорошо.
можно еще группировку попробовать:
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