题目
代码实现
def solution(n: int, m: int, s: str, c: str) -> int:
# write code here
shelf_count = {}
for item in s:
if item in shelf_count:
shelf_count[item] += 1
else:
shelf_count[item] = 1
# 统计最多可以卖出的商品数量
sold_count = 0
for item in c:
if item in shelf_count and shelf_count[item] > 0:
sold_count += 1
shelf_count[item] -= 1 # 减少库存
return sold_count
if __name__ == '__main__':
print(solution(3, 4, "abc", "abcd") == 3)
print(solution(4, 2, "abbc", "bb") == 2)
print(solution(5, 4, "bcdea", "abcd") == 4)
问题背景
在一个超市中,货架上有多个格子,每个格子放置一种商品,商品用小写字母 a 到 z 表示。顾客进入超市后会依次从第一个格子查找到最后一个格子,寻找他们想要购买的商品。如果在某个格子中找到商品,顾客就会购买并离开;如果中途遇到空格子或者查找完所有格子仍未找到商品,顾客也会离开。
作为超市管理员,你可以在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。一旦第一个顾客进入超市,商品的位置就不能再调整。你的任务是计算在最优调整下,最多可以卖出多少件商品。
解决方案
为了最大化卖出的商品数量,我们需要确保顾客能够尽可能多地找到他们想要的商品。具体来说,我们可以通过以下步骤来实现这一目标:
- 统计货架上的商品数量:首先,我们需要统计货架上每种商品的数量,以便知道每种商品的库存情况。
- 计算最多可以卖出的商品数量:接下来,我们遍历顾客想要购买的商品列表,检查每种商品在货架上的库存情况。如果货架上有该商品且库存大于0,我们就增加已售出商品的数量,并减少该商品的库存。
详细步骤
-
初始化货架商品统计表:
- 创建一个字典
shelf_count,用于记录每种商品的数量。 - 遍历字符串
s,统计每种商品的数量并存入shelf_count。
- 创建一个字典
-
计算最多可以卖出的商品数量:
-
初始化一个变量
sold_count,用于记录已售出的商品数量。 -
遍历字符串
c,对于每个顾客想要购买的商品:- 如果该商品在
shelf_count中存在且库存大于0,增加sold_count并减少该商品的库存。
- 如果该商品在
-
-
返回结果:
- 返回
sold_count,即最多可以卖出的商品数量
- 返回
总结与反思
通过上述方法,我们能够有效地计算在最优调整下最多可以卖出的商品数量。这种方法的时间复杂度为 O(n+m),其中 n 是货架上的格子数,m 是顾客想要购买的商品种类数。这是因为我们需要遍历货架上的商品来统计库存,然后再遍历顾客想要购买的商品列表来计算可以卖出的商品数量。
这种方法不仅简单易懂,而且效率高,适用于大多数实际场景。在解决类似问题时,关键在于合理利用数据结构(如字典)来提高算法的效率。