伴学笔记八:组成字符串ku的最大次数问题的解答 | 豆包MarsCode AI刷题

72 阅读4分钟

一、问题描述

给定一个字符串 𝑠s,该字符串中只包含英文大小写字母。你需要计算从字符串中最多能组成多少个字符串 "ku"。每次可以随机从字符串中选一个字符,并且选中的字符不能再使用。字符串中的字符大小写可以忽略,即大写和小写字母视为相同。

例如,输入 "AUBTMKAxfuu",从中最多能组成 1 个 "ku"

二、整体解题分析

这段C++ 代码主要实现了一个名为 solution 的函数,该函数接受一个字符串作为输入,并返回该字符串中小写字母 'k' 和 'u' 数量中较少的那个数量。在 main 函数中通过调用 solution 函数并与预期结果进行比较来验证函数的正确性。

三、编写过程与思路分析

  1. 变量初始化
int count_k = 0;
int count_u = 0;

在 solution 函数内部,首先定义了两个整数变量 count_k 和 count_u,并初始化为0。这两个变量将分别用于统计输入字符串中字母 'k' 和 'u' 的出现次数。

  1. 字符串遍历与字符统计
for (char c : s) {
    char lower_c = tolower(c); // 转换为小写
    if (lower_c == 'k') {
        count_k++;
    } else if (lower_c == 'u') {
        count_u++;
    }
}

这里使用了范围 - for循环来遍历输入的字符串 s。对于字符串中的每个字符 c,首先使用 tolower 函数将其转换为小写字母。这是为了确保无论是大写还是小写的 'k' 和 'u' 都能被正确统计。然后,通过条件判断语句,如果小写后的字符为 'k',则将 count_k 加1;如果为 'u',则将 count_u 加1。这种处理方式使得代码能够准确统计 'k' 和 'u' 在字符串中的出现次数,而不受字母大小写的影响。

  1. 结果计算与返回
return min(count_k, count_u);

在统计完 'k' 和 'u' 的数量之后,使用 min 函数(来自 头文件)来返回 count_k 和 count_u 中较小的值。这个返回值就是函数的最终结果,表示输入字符串中 'k' 和 'u' 数量较少的那个数量。

  1. 主函数中的测试逻辑
int main() {
    cout << (solution("AUBTMKAxfuu") == 1) << endl;
    cout << (solution("KKuuUuUuKKKKkkkkKK") == 6) << endl;
    cout << (solution("abcdefgh") == 0) << endl;
}

在 main 函数中,通过调用 solution 函数并传入不同的测试字符串来验证函数的正确性。对于每个测试用例,将 solution 函数的返回值与预期结果进行比较(使用 == 进行相等性判断),然后将比较结果(布尔值)输出到控制台。例如,对于字符串 "AUBTMKAxfuu",预期 solution 函数返回1,所以将 solution("AUBTMKAxfuu") == 1 的结果输出;对于 "KKuuUuUuKKKKkkkkKK",预期返回6,同样输出比较结果;对于 "abcdefgh",因为其中没有 'k' 和 'u',预期返回0,也输出比较结果。这样的测试方式有助于确保 solution 函数在不同输入情况下都能正确工作。

四、总结

该代码的设计思路简洁明了,采用了逐步处理的方式。首先,明确需要统计输入字符串中特定字母 'k' 和 'u' 的数量,所以定义了相应的计数器变量。然后,通过遍历字符串并将字符转换为小写来统一处理大小写情况,准确统计目标字母的数量。最后,使用标准库中的 min 函数返回较小的数量作为结果。在 main 函数中的测试部分,通过提供不同的测试字符串来覆盖多种可能的情况,包括包含不同数量 'k' 和 'u' 的字符串以及不包含这两个字母的字符串,从而全面地验证 solution 函数的功能正确性。这种设计思路遵循了模块化和功能测试的原则,使得代码易于理解、维护和扩展。同时,利用C++ 标准库中的函数(如 tolower 和 min)提高了代码的简洁性和可读性,避免了重新编写复杂的逻辑来实现相同的功能。