Я наткнулся на проблему, которая превышает мой уровень квалификации.
Найдите уникальный атом (ы) и их количество для любой поставляемой химической формулы, такой как K4 (ON (SO3) 2) 2. - То, что я прошу прямо здесь.
Я понял, что для этой задачи может потребоваться (или, по крайней мере, полезно) программирование рекурсии и / или динамического c программирования.
Вот как далеко я продвинулся:
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, который идентифицирует буквы, цифры и скобки по уровню глубины. Я думаю, что это прогресс в направлении решения. Следующим шагом будет умножение найденных в скобках символов на найденное значение di git.
Любой совет будет признателен!