Al刷题-超市里的货物架调整解析

56 阅读2分钟

问题描述: 在一个超市里,有一个包含n个格子的货物架,每个格子中放有一种商品,商品用小写字母a到z表示。当顾客进入超市时,他们会依次从第一个格子查找到第n 个格子,寻找自己想要购买的商 品。如果在某个格子中找到该商品,顾客就会购买它并离开;如果中途遇到一个空格子,或查找完所有格子还没有找到想要的商品,顾客也会离开。 作为超市管理员,你可以在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。当第 个顾客进入后,商品位置不能再调整。你需要计算在最优调整下,最多可以卖出多少件商品。输入变量说明: n: 货物架的格子数 m: 顾客想要购买的商品种类数 13 s: 货物架上商品的初始顺序 c:顾客想要购买的商品种类 解析:题目实际上是求两个字符串中最大子串的长度。思路也很简单,直接数数量,时间复杂度O(n)。 运用python: def solution(n: int, m: int, s: str, c: str) -> int:     # write code here     goods = {}     needs = {}     for i in s:         goods[i] = goods.get(i, 0) + 1

统计商品频率:遍历货架上的商品,统计每个商品的出现次数。

    for i in c:         needs[i] = needs.get(i, 0) + 1

统计顾客需求:遍历顾客想要购买的商品种类,统计每个商品的需求数量。

    num = 0 初始化卖出商品的数量     for k in needs:         num += min(goods.get(k, 0), needs.get(k, 0))

计算最大匹配:对于每个顾客想要的商品,计算货架上该商品的数量和顾客需求数量的最小值,累加这些最小值即为最多可以卖出的商品数量。

    return num 返回卖出商品的数量

if name == 'main':     print(solution(3, 4, "abc", "abcd") == 3) 货物架格子数为3,顾客想购买的商品种类数为4,货物架上的初始顺序为abc,顾客想要购买的商品种类为abcd,两个字符串的最大子串为abc,长度为3。     print(solution(4, 2, "abbc", "bb") == 2)

货物架格子数为4,顾客想购买的商品种类数为2,货物架上的初始顺序为abbc顾客想要购买的商品种类为宝宝,两个字符串的最大子串为bb,长度为2。

    print(solution(5, 4, "bcdea", "abcd") == 4)

货物架格子数为5,顾客想购买的商品种类数为4,货物架上的初始顺序为bcdea,顾客想要购买的商品种类为abcd,两个字符串的最大子串为bcd,长度为3。