有四种形状的括号如下。
类型1:'('或')'
类型2:'{'或'}'
类型3:'['或']'
类型4:'<'或'>'
如果只有如上所示的由四个形状的括号组成的字符串,请编写一个函数以返回最内部括号的深度。深度由重叠程度定义。最外面的括号的深度为1,最外面的括号内的括号深度为2,另外一个括号的深度为3.
实施例: - “{([])[()(小于>)]}” 这里最大深度为4.让字符串包含有效括号。
答案 0 :(得分:6)
简单实施:
open_brackets = '[', '{', '(', '<'
close_brackets = ']', '}', ')', '>'
depth = 0
max_depth = 0
for character in string
if open_brackets contains character
depth++
if depth > max_depth
max_depth = depth
else if close_brackets contains character
depth--
return max_depth
请注意,这并不关心错误匹配的括号(例如,它发现'[(])'可接受)。
如果你确实想检查不匹配的括号,你需要一个堆栈。遇到开放式支架时,将其推入堆叠。当您遇到一个近距离支架时,将顶部支架从堆叠中弹出,并确保它与该近距离支架的类型相同。像......那样......
open_brackets = '[', '{', '(', '<'
close_brackets = ']', '}', ')', '>'
max_depth = 0
stack = new stack
for character in string
if open_brackets contains character
stack.push character
if stack.count > max_depth
max_depth = stack.count
else if close_brackets contains character
desired_closing_bracket = stack.pop
if desired_closing_bracket is not the same type as character
throw exception "Mis-matched bracket. Got {character}, expected {desired_closing_bracket"
return max_depth
这个算法的弱点在于,stack.pop
行可能会失败,如果你获得的结束括号多于左括号,则会出现异常。预测或捕获此异常可能是明智的,并提供更有用的错误消息。
另外,如果你想检查没有比关闭括号更多的左括号,检查循环后堆栈是否为空。
答案 1 :(得分:2)
由于您没有指定语言,我将在Python中执行此操作。它也非常接近伪代码,您可以轻松地将其翻译成其他语言:
这样的事情:
def maxdepth(s):
depth = 0
maxdepth = 0
for c in s:
print c
if c in '[({<':
depth = depth + 1
maxdepth = max(maxdepth, depth)
print depth, maxdepth
elif c in '])}>':
depth = depth - 1
print depth, maxdepth
return maxdepth