Более эффективный по времени и пространству способ получить доступ к значению словаря в стеке, не зная его ключа? - PullRequest
0 голосов
/ 02 июня 2018

Я столкнулся с этой проблемой, пытаясь решить проблему с конфетой.Вот МОЯ версия объяснения проблемы:

Если задана строка "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

Какой из двух подходов более эффективен по времени и пространству и существует ли другой подходчто превосходит два, учитывая подход с использованием стека словарей для решения проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...