描述
现有一字符串 仅由 '(', ')', '{', '}', '[', ']'
一共六种括号组成。若字符串满足以下条件之一,则为无效字符串。
- 任意类型的左右括号数量不相等
- 存在未按正确顺序(先左后右)闭合的括号, 输出括号的最大嵌套深度,若字符串无效则输出 0。
0 <= 字符串长度 <= 100000
输入描述:
一个只包括 '(', ')', '{', '}', '[', ']'
以一共6种字符的字符串。
输出描述:
一个整数,表示最大的括号深度。若字符串无效,则输出 0
示例1
输入:[]
输出:1
说明:该字符串有效,且最大嵌套深度为 1
示例2
输入:([]{()})
输出:3
说明:该字符串有效,且最大嵌套深度为 3
示例3
输入:(]
输出:0
说明:该字符串无效
示例4
输入:([)]
输出:0
说明:该字符串无效
示例5
输入:)(
输出:0
说明:该字符串无效
解题思路
- 首先,创建一个空栈
stack
用于存储遇到的左括号。 - 初始化最大深度
max_depth
为0。 - 遍历字符串
s
中的每个字符c
:- 如果
c
是左括号('(', '[', '{')
,将其压入栈中,并更新最大深度max_depth
为当前栈的长度和已知最大深度之间的较大值。 - 如果
c
是右括号(')', ']', '}')
,则检查栈是否为空,或者栈顶元素是否与当前右括号匹配。如果不匹配,说明括号不匹配,返回0。如果匹配,将栈顶元素弹出。
- 如果
- 遍历结束后,如果栈为空,说明所有括号都匹配,返回最大深度
max_depth
;否则,说明有未匹配的括号,返回0。
def max_depth(s):stack = []max_depth = 0for c in s:if c in '([{':stack.append(c)max_depth = max(max_depth, len(stack))elif c in ')]}':if not stack or (c == ')' and stack[-1] != '(') or (c == ']' and stack[-1] != '[') or (c == '}' and stack[-1] != '{'):return 0stack.pop()return max_depth if not stack else 0# 测试示例
print(max_depth("[]")) # 输出:1
print(max_depth("([]{()})")) # 输出:3
print(max_depth("(]")) # 输出:0
print(max_depth("([)]")) # 输出:0
print(max_depth(")(")) # 输出:0