首页 > 解决方案 > 在不知道其键的情况下访问堆栈中字典值的更节省时间和空间的方法?

问题描述

我在尝试解决字符串糖果迷恋问题时遇到了这个问题。这是我对问题的解释:

给定一个字符串"DAABBBBABCC",返回一个字符串,其中删除了 3 个或更多连续的字母或字符。请注意,一旦您删除了字符串的一部分,任何包含 3 个或更多连续字母的新组合也应随后被删除。

因此"DAABBBBABCC",当 reduce 变为 " 时DAAABCC",将进一步简化为"DBCC"[返回的字符串]。

我通过维护一堆字母字典来解决这个问题。如果我看到字母“a”,我会将它添加到堆栈中{'a': 1},如果下一个字母也是'a',我会增加这个值,否则我会将新字母的字典推入堆栈{'b': 1}。现在为了增加重复字符的计数,我需要检查添加到堆栈中的最后一个字母字典的计数。在不知道最后一个被推送的字典中的键是什么的情况下,在 Python 中访问计数的最有效方法是什么?

为了解释这个问题,这里有一个例子。堆栈是在遍历字符串后构建的"hhaaa"

>>> stack
[{'h': 2}, {'a': 3}]

我想到了两种方法,但它们似乎有些费力。哪一个比另一个更有效,是否有更短的方法来获得计数?注意:你不知道最后一个字典的键是什么,并且字典总是有一个键值对。

第一种方法是:

>>> value = list(stack[-1].values())[0]
>>> value
3

第二种方法是:

>>> value = next(iter(stack[-1].values()))
>>> value
3

考虑到使用一堆字典来解决问题的方法,这两种方法中的哪一种更节省时间和空间?还有另一种方法可以胜过这两种方法吗?

标签: pythondictionarystack

解决方案


推荐阅读