超市里的货物架调整|豆包MarsCode AI刷题

53 阅读2分钟

1.题目

问题描述

在一个超市里,有一个包含 nn 个格子的货物架,每个格子中放有一种商品,商品用小写字母 az 表示。当顾客进入超市时,他们会依次从第一个格子查找到第 n 个格子,寻找自己想要购买的商品。如果在某个格子中找到该商品,顾客就会购买它并离开;如果中途遇到一个空格子,或查找完所有格子还没有找到想要的商品,顾客也会离开。

作为超市管理员,你可以在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。当第一个顾客进入后,商品位置不能再调整。你需要计算在最优调整下,最多可以卖出多少件商品。输入变量说明:

  • n:货物架的格子数
  • m:顾客想要购买的商品种类数
  • s:货物架上商品的初始顺序
  • c:顾客想要购买的商品种类

测试样例

样例1:

输入:n = 3 ,m = 4 ,s = "abc" ,c = "abcd" 输出:3

样例2:

输入:n = 4 ,m = 2 ,s = "abbc" ,c = "bb" 输出:2

样例3:

输入:n = 5 ,m = 4 ,s = "bcdea" ,c = "abcd" 输出:4

2.思路

先通过测试样例看一下题目的意思

样例1:

输入:

货物架的格子数n = 3 ,

顾客想要购买的商品种类数m = 4 ,

货物架上商品的初始顺序s = "abc" ,

顾客想要购买的商品种类c = "abcd" 输出:

最多卖出3件商品

此时无需调整

可以发现,将商品顺序调成和顾客想要购买的商品种类一样即可,也就是说,从货架上找出顾客想要的商品,有几件符合,将它们按序摆放,就能卖出几件。

所以,可以设置一个长度为n的数组,标记商品是否被卖出,顾客想买的商品有且没有被卖出,则该商品可卖出。

注:

  • 找子串字符串序列``.find``(子串,开始位置的下标,结束位置的下标)

3.代码

def solution(n: int, m: int, s: str, c: str) -> int:
    # write code here
    result = 0
    flag = [False] * n
    for i in range(len(c)):
        for j in range(len(s)):
            if c[i] == s[j] and flag[j] is False:
                result += 1
                flag[j] = True
    return result

s="acabacccaabbcca"

c="tvbaecosivjdocp"

你的输出=15

预期输出=4

注意每个字符只允许匹配一次,成功匹配后break

def solution(n: int, m: int, s: str, c: str) -> int:
    # write code here
    result = 0
    flag = [False] * n
    for i in range(len(c)):
        for j in range(len(s)):
            if c[i] == s[j] and flag[j] is False:
                result += 1
                flag[j] = True
                break
    return result

if __name__ == '__main__':
    print(solution(3, 4, "abc", "abcd") == 3)
    print(solution(4, 2, "abbc", "bb") == 2)
    print(solution(5, 4, "bcdea", "abcd") == 4)