AI刷题第9题解答

51 阅读2分钟

问题理解

你需要重新排列货架上的商品,使得尽可能多的顾客能够买到他们想要的商品。每个顾客只会购买他们想要的商品列表中的第一个出现的商品。

数据结构选择

  1. 货架上的商品:可以使用一个字符串 s 来表示。
  2. 顾客想要的商品:可以使用一个字符串 c 来表示。

算法步骤

  1. 统计商品频率:首先统计货架上每种商品的出现次数。
  2. 优先满足顾客需求:根据顾客想要的商品列表 c,优先将这些商品放在货架的前面。
  3. 计算最大销售量:根据重新排列后的货架,计算最多可以卖出多少件商品。
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)

关键步骤注释

  1. 统计商品频率:使用 Counter 来统计货架上每种商品的出现次数。
  2. 优先满足顾客需求:遍历顾客想要的商品列表 c,将这些商品尽可能多地放入新货架 new_shelf
  3. 计算最大销售量:遍历顾客想要的商品列表 c,计算在新货架中可以卖出的商品数量。