【发布时间】:2020-01-13 00:53:26
【问题描述】:
我偶然发现了一个超出我技能水平的问题。
查找任何提供的化学式的唯一原子及其计数,例如 K4(ON(SO3)2)2。 ——我在这里要求的。
我已经收集到这个问题可能需要(或至少有用)递归和/或动态编程。
这是我已经走了多远:
class Solution(object):
def __init__(self):
self.code = []
self.atoms = {}
def encode_string(self,string):
"""
Return a list of elements where
@'a' = alphabetical
@'d' = digit
@int = parentheses, wherre number reflects nesting.
'k4(on(so3)2)2' --> ['a', 'd', 1, 'a', 'a', 2, 'a', 'a', 'd', 2, 'd', 1, 'd']
"""
self.string = string
for char in string:
if char.isalpha():
self.code.append('a')
elif char.isdigit():
self.code.append('d')
elif char == '(':
self.code.append('l') #left parenthesis
else:
self.code.append('r') #right parenthesis
self.pars = [elem for elem in self.code if elem in ['r','l']]
self.par_structure = []
count = 1
for idx, elem in enumerate(self.pars):
if elem == 'l':
self.par_structure.append(count)
count += 1
elif elem == 'r':
count -= 1
self.par_structure.append(count)
count = 0
for idx, char in enumerate(self.code):
if char in ['l','r']:
self.code[idx] = self.par_structure[count]
count += 1
def id_atoms(self):
self.indices = [idx for idx,elem in enumerate(self.code) if elem == 0]
for idx in self.indices:
atom = self.string[idx]
self.atoms[atom] = 0
def parse_code():
pass
我已经列出了 encode_string 方法的用例,它通过深度级别识别字母、数字和括号。我认为这是朝着解决方案迈出的一步。下一步是将括号内的字符乘以找到的数字值。
任何建议将不胜感激!
【问题讨论】:
-
K4(ON(SO3)2)2 的预期输出是多少?
-
所以基本上当给定
K4(ON(SO3)2)2或类似的化学式时,您想梳理出每个原子的数量? -
@mkrieger1 我需要计算每个原子的出现次数,一本字典就足够了。
-
@jarmod {'k':4, 'o':14, ...}
-
所以是this problem,不是吗?为什么不这么说呢?
标签: python recursion dynamic-programming