Учитывая строку, содержащую только символы '(', ')', '{', '}', '[' и ']', вы должны сделать ее действительной.
Этот вопрос отличается от проблемы LeetCode Classi c. Этот вопрос в основном просит вас сделать его действительным, исправив его.
Если я дам вам строку: "{(}("
Вы должны вернуть мне новую строку, в которой скобки совпадают: {()}
или (){}
Это не так как удаление проблемы с круглыми скобками. Вы можете добавить, но не можете удалить.
Итак, если дано (
, вы должны вернуть ()
.
Вот мой код, но я понимаю, что он удваивает скобки. Буду признателен, если кто-то может дать более эффективное решение.
def parentheses_fix(paran):
stack = []
valid = []
dictionaryOpen = {'(':')','{':'}','[':']'}
dictionaryClosed = {')':'(', '}':'{', ']':'['}
for i in range(len(paran)):
if paran[i] in dictionaryOpen.keys():
stack.append(paran[i])
valid.append(paran[i])
elif paran[i] in dictionaryOpen.values():
if len(stack) > 0:
g = stack.pop()
#closed paranthesis
valid.append(dictionaryOpen[g])
valid.append(dictionaryClosed[paran[i]])
valid.append(paran[i])
else:
valid.append(dictionaryClosed[paran[i]])
valid.append(paran[i])
for i in range(len(stack)):
valid.append(dictionaryOpen[stack[-(1+i)]])
return ''.join(valid)