开发者社区> 问答> 正文

编写一个递归函数matching_bracket(string,idx)以找到与string [id

尽管有很多关于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

我应该如何修改我的代码?

展开
收起
祖安文状元 2020-02-21 14:02:55 491 0
1 条回答
写回答
取消 提交回答
  • 在上面的代码中,首先要检查条件是否在下一个括号的类型是否为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
    
    2020-02-21 14:03:04
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多