问题背景:
- 我们有一个长度为
n的货架,上面摆放着n种不同的商品,每种商品由一个字符表示。 - 同时,我们有一组顾客,他们想要购买的商品列表,长度为
m,每种商品也由一个字符表示。 - 每个顾客只能买一种商品,且每个商品只能卖给一个顾客。
目标:
- 计算在最优情况下,能够卖出的最大商品数量。
解题思路
-
需求统计:
- 使用一个字典或
Counter对象来统计顾客想要购买的各种商品的数量。这样我们可以快速查找每种商品的需求量。
- 使用一个字典或
-
遍历货架:
- 遍历货架上的每个位置(从 0 到
n-1),检查当前货架上的商品是否是顾客需要的。 - 如果当前商品是顾客需要的,并且还有剩余需求,则将该商品售出,并更新需求量。
- 遍历货架上的每个位置(从 0 到
-
结果计算:
- 每次成功售出一个商品,就增加一个计数器,最终返回这个计数器的值。
代码分析
Python
深色版本
from collections import Counter
def solution(n: int, m: int, s: str, c: str) -> int:
# 统计顾客想要购买的商品种类的数量
customer_counts = Counter(c)
# 初始化结果为0
result = 0
# 遍历货架上的每个位置
for i in range(n):
# 如果当前格子中的商品是顾客需要的,并且该商品还有需求
if s[i] in customer_counts and customer_counts[s[i]] > 0:
# 减少该商品的需求量
customer_counts[s[i]] -= 1
# 增加卖出的商品数量
result += 1
return result
# 测试代码
print(solution(3, 4, "abc", "abcd")) # 输出:3
print(solution(4, 2, "abbc", "bb")) # 输出:2
print(solution(5, 4, "bcdea", "abcd")) # 输出:4
详细步骤
-
需求统计:
- 使用
Counter(c)来统计顾客需要的每种商品的数量。例如,对于c = "abcd",customer_counts将是{'a': 1, 'b': 1, 'c': 1, 'd': 1}。
- 使用
-
初始化结果:
- 初始化一个变量
result为 0,用于记录成功售出的商品数量。
- 初始化一个变量
-
遍历货架:
- 使用
for i in range(n)遍历货架上的每个位置。 - 对于每个位置
i,检查s[i]是否在customer_counts中,并且customer_counts[s[i]]是否大于 0。 - 如果满足条件,则减少
customer_counts[s[i]]的值,并增加result。
- 使用
-
返回结果:
- 最后返回
result,即成功售出的商品数量。
- 最后返回
测试用例分析
-
测试用例 1:
- 输入:
n = 3,m = 4,s = "abc",c = "abcd" - 输出:
3 - 解释:货架上有
a,b,c,顾客需要a,b,c,d。可以成功售出a,b,c,共 3 件商品。
- 输入:
-
测试用例 2:
- 输入:
n = 4,m = 2,s = "abbc",c = "bb" - 输出:
2 - 解释:货架上有
a,b,b,c,顾客需要b,b。可以成功售出两个b,共 2 件商品。
- 输入:
-
测试用例 3:
- 输入:
n = 5,m = 4,s = "bcdea",c = "abcd" - 输出:
4 - 解释:货架上有
b,c,d,e,a,顾客需要a,b,c,d。可以成功售出a,b,c,d,共 4 件商品。
- 输入:
通过以上分析和代码实现,我们可以确保在最优情况下计算出能够卖出的最大商品数量。