尽管有很多关于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
我应该如何修改我的代码?
在上面的代码中,首先要检查条件是否在下一个括号的类型是否为open。如果是,则使用下一个括号索引调用matching_bracket。并丢失您要为其括弧索引的实际大括号索引。使用以下方法签出以下解决方案:
def matching_bracket(string, idx):
open_tup = ("(", "{", "<", "[")
close_tup = (")", "}", ">", "]")
dict_brackets = {"{": "}", "(": ")", "<": ">", "[": "]"}
stack = []
if string[idx] in close_tup or idx >= len(string):
return -1
stack.append(string[idx])
for t in range(idx + 1, len(string)):
if string[t] in open_tup:
stack.append(string[t])
else:
if string[t] != dict_brackets.get(stack.pop()):
return -1
elif len(stack) == 0:
return t
return -1
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。