Я столкнулся с этой проблемой, пытаясь решить проблему с конфетой.Вот МОЯ версия объяснения проблемы:
Если задана строка "DAABBBBABCC"
, вернуть строку, в которой удалены 3 или более последовательных букв или символов.Обратите внимание, что после удаления части строки любые новые комбинации, которые составляют 3 или более последовательных букв, также должны быть впоследствии удалены.
Следовательно, "DAABBBBABCC"
при уменьшении становится "DAAABCC"
, который в дальнейшем уменьшается до "DBCC"
[возвращенная строка].
Я решил эту проблему, поддержав стопку буквсловари. Если бы я увидел букву «а», я бы добавил ее в стек как {'a': 1}
, а если бы следующая буква была также 'a'
, я бы увеличил это значение, в противном случае я бы вставил в стек словарь новой буквыскажем {'b': 1}
. Теперь, чтобы увеличить счетчик повторяющегося символа, мне нужно проверить счетчик последнего буквенного словаря, добавленного в стек. Каков наиболее эффективный способ доступа к счетчику в Python, не зная, чтоключ находится в этом последнем словаре, который был выдвинут?
Для объяснения вопроса, вот пример. Стек был построен после итерации по строке "hhaaa"
>>> stack
[{'h': 2}, {'a': 3}]
IЯ подумал о двух способах, но они кажутся несколько трудоемкими. Какой из них более эффективен, чем другой, и есть ли более короткий способ подсчета? ПРИМЕЧАНИЕ : вы не знаете, какой является ключ последнего словаря, и словарь всегда будет иметь одну пару ключ-значение.
1-й подход:
>>> value = list(stack[-1].values())[0]
>>> value
3
2-й подход:
>>> value = next(iter(stack[-1].values()))
>>> value
3
Какой из двух подходов более эффективен по времени и пространству и существует ли другой подходчто превосходит два, учитывая подход с использованием стека словарей для решения проблемы?