Несмотря на то, что есть много вопросов по stackoverflow, чтобы проверить, сбалансирована ли строка, мне нужно найти индекс закрывающей скобки string[idx]
. Например:
>>> matching_bracket('([])', 0)
3
>>> matching_bracket('([])', 1)
2
Существует 3 условия, которые будут возвращать -1
:
закрывающая скобка не того же типа
вложенные скобки не совпадают [ВАЖНО]
больше нет доступных скобок
Вот что у меня есть до сих пор:
def matching_bracket(string, idx):
open_tup = ("(", "{", "<", "[")
close_tup = (")", "}", ">", "]")
chosen = string[idx]
b_index = open_tup.index(chosen)
n = len(string) - 1
if string[idx + 1] in open_tup: # Case 1: Check if nested brackets match
return matching_bracket(string, idx + 1)
elif string[n] != close_tup[b_index]: # Case 2: Closing bracket not the same
return matching_bracket(string[0 : n], idx)
elif len(string) == 1: # Case 3: No more available brackets
return -1
else:
return n
Пока я выполняю рекурсивную функцию, чтобы проверить, закрыты ли вложенные скобки, у меня возникают трудности с получением правильного вывода, поскольку я в конечном итоге возвращаю индекс закрывающей скобки, которая вместо этого вложен См. Ниже:
>>> matching_bracket('([])', 0)
2
Как мне изменить мой код?