问题理解:
货物架上有n个格子,每个格子中放置一个商品,用小写字母a到z表示。顾客从货物架第一个格子开始,依次寻找自己想购买的商品。如果:在某个格子找到了目标商品,顾客就购买并离开;遇到一个空格子或者找不到目标商品,顾客也会离开。我们的任务是重新调整货物架上的商品顺序,最大化顾客可以购买到的商品数量。
分析任务:
1.货物架上的商品库存有限,顾客的需求量可能大于或小于库存量。
2.为了最大化售出商品,应该优先安排顾客需求中商品的顺序。
3.每种商品实际售出的数量不能超过货物架上该商品的库存。
详细解法:
步骤 1:统计库存和需求
用 Counter 来统计:
货物架上每种商品的库存量。
顾客需求中每种商品的需求量。
步骤 2:计算满足需求的商品数量
对顾客的每种商品需求:
如果这种商品在货物架上有库存,取库存量和需求量的较小值。
如果这种商品不在货物架上,则无法满足需求。
步骤 3:计算总售出商品数量
将每种商品实际售出的数量累加,得到最终结果。
代码实现:
def solution(n: int, m: int, s: str, c: str) -> int:
from collections import Counter
stock = Counter(s)
demand = Counter(c)
sold = 0
for item, qty in demand.items():
if item in stock:
sold += min(stock[item], qty)
return sold
总结:
**这道题的核心在于:
用哈希表快速统计商品的库存和顾客的需求。
合理地匹配需求与库存,保证每种商品的售出数量不超出库存。**