字节青训每日一题
题目:数字翻译成字符串的可能性
小M获得了一个任务,需要将数字翻译成字符串。翻译规则是:0对应"a",1对应"b",依此类推直到25对应"z"。一个数字可能有多种翻译方法。小M需要一个程序来计算一个数字有多少种不同的翻译方法。
例如:数字12258
可以翻译成 "bccfi", "bwfi", "bczi", "mcfi" 和 "mzi",共5种方式。
demo
def solution(num):
num_str = str(num)
n = len(num_str)
dp = [1] * (n + 1)
for i in range(2, n + 1):
dp[i] = dp[i - 1]
if 10 <= int(num_str[i - 2:i]) <= 25:
dp[i] += dp[i - 2]
return dp[n]
题目:超市里的货物架构调整
在一个超市里,有一个包含 nn 个格子的货物架,每个格子中放有一种商品,商品用小写字母 a
到 z
表示。当顾客进入超市时,他们会依次从第一个格子查找到第 nn 个格子,寻找自己想要购买的商品。如果在某个格子中找到该商品,顾客就会购买它并离开;如果中途遇到一个空格子,或查找完所有格子还没有找到想要的商品,顾客也会离开。
作为超市管理员,你可以在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。当第一个顾客进入后,商品位置不能再调整。你需要计算在最优调整下,最多可以卖出多少件商品。输入变量说明:
n
:货物架的格子数m
:顾客想要购买的商品种类数s
:货物架上商品的初始顺序c
:顾客想要购买的商品种类
demo
def solution(n: int, m: int, s: str, c: str) -> int:
# 统计顾客想要购买的每种商品在初始顺序s中的出现次数
count_c = {}
for char in c:
count_c[char] = count_c.get(char, 0) + 1
# 创建一个新的列表来表示重新排列后的货物架
new_s = []
# 先将顾客想要购买且在初始顺序s中存在的商品按购买次数从多到少放入新的货物架
for char, count in sorted(count_c.items(), key=lambda x: x[1], reverse=True):
if char in s:
new_s.extend([char] * min(count, s.count(char)))
# 将初始顺序s中剩余的商品放入新的货物架
for char in s:
if char not in new_s:
new_s.append(char)
# 检查重新排列后的货物架能满足多少顾客的购买需求
sold_count = 0
for char in c:
if char in new_s:
sold_count += 1
new_s.remove(char)
return sold_count
if __name__ == '__main__':
print(solution(3, 4, "abc", "abcd") == 3)
print(solution(4, 2, "abbc", "bb") == 2)
print(solution(5, 4, "bcdea", "abcd") == 4)