一道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)#每个深度箱子数量,即每个型号箱子个数相加