一道hard难度的算法 猿辅导笔试 数箱子

题目大概是这样:[]代表一个箱子,[]3代表3个箱子,[[]3]代表一个大箱子里有3个小箱子,一共四个箱子,[[]3]2代表两个大箱子,每个大箱子里有3个小箱子一个8个箱子。问题是一共有多少个箱子? 输入: 一行字符串,代表箱子摆放情况。 箱子一定是完整的[] 输出: int整数 示例: 输入:[][[][][]2]3 输出:16 输入:[][][[[]3[]2]2]2 输出:28

def longest(s: str):
    if not s:#输入为空
        return 0
    stack = []
    dep=0#记录深度,即现在所在的外层有多少括号
    depth=[]#记录每层深度的和,即每层括号里面的和
    for i in range(len(s)):
        if s[i] == [:#遇到左括号深度+1
            stack.append(i)
            dep+=1
            depth.append(0)
        else:
            if i<len(s)-1 and s[i] == ] and s[i+1] in []:#遇到右括号,深度-1,且右括号后没有数字,则可以直接当前深度箱子数量可直接加1
                stack.pop()
                dep-=1
                depth[dep]+=1
            elif i==len(s)-1 and s[i] == ]:#考虑边界情况,深度-1,当前深度箱子数量加1
                stack.pop()
                dep -= 1
                depth[dep] += 1
            elif s[i] == ] and s[i+1] not in []:#遇到右括号,深度-1,右括号后有数字,则当前深度箱子数量可直接加num,且当前深度+1到最大深度每个深度都需要乘num
                num=int(s[i+1])
                dep -= 1
                depth[dep] += num
                for i in range(dep+1,len(depth)):
                    depth[i]=num*depth[i]
    return sum(depth)#每个深度箱子数量,即每个型号箱子个数相加
经验分享 程序员 微信小程序 职场和发展