【发布时间】:2018-08-07 02:54:46
【问题描述】:
我正在尝试解决这个问题:https://leetcode.com/articles/number-of-atoms/#approach-1-recursion-accepted。
问题是:给定一个像C(Mg2(OH)4)2 这样的公式,返回一个包含元素及其计数的哈希表。元素名称总是以大写字母开头,后面可以跟一个小写字母。
我想我会首先解决最简单的情况:没有括号。
def bracket_hash(formula):
element = ""
atom_count = 0
element_hash = {}
for x in formula:
if x.isupper():
if element!="":
element_hash[element] = 1
element = ""
element = x
elif x.islower():
element += x
else:
element_count = int(x)
element_hash[element] = element_count
element_count = 0
element = ""
if element!="":
element_hash[element] = 1
return element_hash
此代码非常适合以下情况:
print(bracket_hash("H2O"))
print(bracket_hash("CO2"))
print(bracket_hash("Mg2O4"))
print(bracket_hash("OH"))
现在我认为必须以某种方式使用堆栈来处理像OH(Ag3(OH)2)4 这样的多个括号的情况,这里 Ag 的计数必须是 3*4 而 O 和 H 的计数将是 2*4 + 1。
到目前为止,我是这样开始的:
def formula_hash(formula):
stack = []
final_hash = {}
cur = ""
i = 0
while i < len(formula):
if formula[i] == '(':
j = i
while formula[j]!=')':
j = j + 1
cur = formula[i:j]
stack.append(bracket_hash(cur))
cur = ""
i = j + 1
但现在我被卡住了。
我有点卡住了,因为编码问题变得越来越长并且涉及到混合数据结构来解决。在这里他们使用哈希表和堆栈。
所以我的问题是:如何将这个问题分解为可管理的部分并解决它。如果我真的要解决这个问题,我必须将它映射到可管理的代码段。任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: python algorithm data-structures hash stack