【华为面试基础题】最大括号深度

描述

现有一字符串 仅由 '(', ')', '{', '}', '[', ']'一共六种括号组成。若字符串满足以下条件之一,则为无效字符串。

  1. 任意类型的左右括号数量不相等
  2. 存在未按正确顺序(先左后右)闭合的括号, 输出括号的最大嵌套深度,若字符串无效则输出 0。
    0 <= 字符串长度 <= 100000

输入描述:
一个只包括 '(', ')', '{', '}', '[', ']' 以一共6种字符的字符串。

输出描述:
一个整数,表示最大的括号深度。若字符串无效,则输出 0

示例1

输入:[]
输出:1
说明:该字符串有效,且最大嵌套深度为 1

示例2

输入:([]{()})
输出:3
说明:该字符串有效,且最大嵌套深度为 3

示例3

输入:(]
输出:0
说明:该字符串无效

示例4

输入:([)]
输出:0
说明:该字符串无效

示例5

输入:)(
输出:0
说明:该字符串无效

解题思路

  1. 首先,创建一个空栈stack用于存储遇到的左括号。
  2. 初始化最大深度max_depth为0。
  3. 遍历字符串s中的每个字符c
    • 如果c是左括号('(', '[', '{'),将其压入栈中,并更新最大深度max_depth为当前栈的长度和已知最大深度之间的较大值。
    • 如果c是右括号(')', ']', '}'),则检查栈是否为空,或者栈顶元素是否与当前右括号匹配。如果不匹配,说明括号不匹配,返回0。如果匹配,将栈顶元素弹出。
  4. 遍历结束后,如果栈为空,说明所有括号都匹配,返回最大深度max_depth;否则,说明有未匹配的括号,返回0。
def max_depth(s):
    stack = []
    max_depth = 0
    for 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 0
            stack.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值