小F寻找字符 | 豆包MarsCode AI刷题

57 阅读2分钟

题目地址:小F寻找字符

问题描述

小F和他的朋友们围成了一个圈,他们每个人背上贴了一个字母,要么是A,要么是B。从第一个人开始计数,每当他遇到一个贴着字母A的人就计数一次。当他计数到第k个A时,任务就结束了。你需要帮助小F计算一下,他总共需要数多少个人才能在第k次遇到A后停止。保证至少有一个人背上贴的是A


测试样例

样例1:

输入:n = 3 ,k = 3 ,people = "AAB"
输出:4

样例2:

输入:n = 3 ,k = 3 ,people = "BBA"
输出:9

样例3:

输入:n = 5 ,k = 4 ,people = "ABABA"
输出:6

今天我们就利用一下豆包AI的解释功能看看如何
先看代码
def solution(n: int, k: int, people: str) -> int:
    # write code here
    count_A = 0  # 计数A的数量
    total_count = 0  # 计数总人数
    i = 0  # 当前人的索引
 
    # 继续循环,直到遇到第k个A
    while count_A < k:
        if people[i % n] == 'A':  # 使用模运算处理循环
            count_A += 1  # 遇到A,计数
        total_count += 1  # 计数总人数
        i += 1  # 继续下一个人
 
    return total_count
 
这段代码定义了一个名为 `solution` 的函数,它接受三个参数:`n``k` 和 `people`。这个函数的目的是在一个由 `n` 个人组成的环形队列中,找到第 `k` 个出现的字母 `A`,并返回此时已经检查过的总人数。

函数的工作流程如下:

1.  初始化两个计数器:`count_A` 用于记录字母 `A` 出现的次数,`total_count` 用于记录已经检查过的总人数。
1.  使用一个循环来遍历队列中的人,直到找到第 `k` 个字母 `A`1.  在循环内部,检查当前人的字母是否为 `A`。如果是,则增加 `count_A` 的计数。
1.  无论当前人的字母是否为 `A`,都增加 `total_count` 的计数,以表示已经检查过的总人数。
1.  继续下一个人的检查,通过将索引 `i` 加一来实现。由于队列是环形的,所以使用模运算 `i % n` 来确保索引不会超出队列的长度。
1.  当 `count_A` 达到 `k` 时,循环结束,此时 `total_count` 即为所求的总人数。

最后,函数返回 `total_count`。
可以看出AI的解释还是比较清楚的
题目的求解还是比较容易让人理解的
进行一个数组内a的数量统计,再计算需要循环的次数。

20230310_140838.jpg