问题理解
你需要重新排列货架上的商品,使得尽可能多的顾客能够买到他们想要的商品。每个顾客只会购买他们想要的商品列表中的第一个出现的商品。
数据结构选择
- 货架上的商品:可以使用一个字符串
s来表示。 - 顾客想要的商品:可以使用一个字符串
c来表示。
算法步骤
- 统计商品频率:首先统计货架上每种商品的出现次数。
- 优先满足顾客需求:根据顾客想要的商品列表
c,优先将这些商品放在货架的前面。 - 计算最大销售量:根据重新排列后的货架,计算最多可以卖出多少件商品。
def solution(n: int, m: int, s: str, c: str) -> int:
# 统计货架上每种商品的出现次数
from collections import Counter
count = Counter(s)
# 初始化一个列表来存储重新排列后的货架
new_shelf = []
# 优先满足顾客想要的商品
for item in c:
if count[item] > 0:
# 将该商品尽可能多地放入新货架
new_shelf.extend([item] * count[item])
# 从计数中移除这些商品
count[item] = 0
# 将剩余的商品按原顺序放入新货架
for item in s:
if count[item] > 0:
new_shelf.append(item)
count[item] -= 1
# 计算最多可以卖出多少件商品
sold = 0
for item in c:
if item in new_shelf:
sold += 1
# 移除已经卖出的商品
new_shelf.remove(item)
return sold
if __name__ == '__main__':
print(solution(3, 4, "abc", "abcd") == 3)
print(solution(4, 2, "abbc", "bb") == 2)
print(solution(5, 4, "bcdea", "abcd") == 4)
关键步骤注释
- 统计商品频率:使用
Counter来统计货架上每种商品的出现次数。 - 优先满足顾客需求:遍历顾客想要的商品列表
c,将这些商品尽可能多地放入新货架new_shelf。 - 计算最大销售量:遍历顾客想要的商品列表
c,计算在新货架中可以卖出的商品数量。