组成字符串ku的最大次数 问题描述 给定一个字符串 ss,该字符串中只包含英文大小写字母。你需要计算从字符串中最多能组成多少个字符串 "ku"。每次可以随机从字符串中选一个字符,并且选中的字符不能再使用。字符串中的字符大小写可以忽略,即大写和小写字母视为相同。
例如,输入 "AUBTMKAxfuu",从中最多能组成 1 个 "ku"。
测试样例 样例1:
输入:s = "AUBTMKAxfuu" 输出:1
样例2:
输入:s = "KKuuUuUuKKKKkkkkKK" 输出:6
样例3:
输入:s = "abcdefgh" 输出:0
解题思路: 问题理解 我们需要从给定的字符串 s 中,计算最多能组成多少个字符串 "ku"。字符的大小写可以忽略,即大写和小写字母视为相同。
数据结构选择 为了统计字符 'k' 和 'u' 的数量,我们可以使用一个计数器来记录每个字符的出现次数。由于字符的大小写不敏感,我们可以将所有字符转换为小写(或大写)来统一处理。
算法步骤 初始化计数器:创建两个计数器,分别用于统计字符 'k' 和 'u' 的出现次数。 遍历字符串:遍历字符串 s,将每个字符转换为小写(或大写),然后根据字符是 'k' 还是 'u' 来增加相应的计数器。 计算结果:字符串 "ku" 的组成次数取决于 'k' 和 'u' 中数量较少的那个。因此,结果为 min(count_k, count_u)。 最终代码: #include #include #include #include // for std::min
using namespace std;
int solution(const string& s) { int count_k = 0; int count_u = 0;
// 遍历字符串,统计 'k' 和 'u' 的数量
for (char c : s) {
char lower_c = tolower(c); // 转换为小写
if (lower_c == 'k') {
count_k++;
} else if (lower_c == 'u') {
count_u++;
}
}
// 返回 'k' 和 'u' 中数量较少的那个
return min(count_k, count_u);
}
int main() { cout << (solution("AUBTMKAxfuu") == 1) << endl; cout << (solution("KKuuUuUuKKKKkkkkKK") == 6) << endl; cout << (solution("abcdefgh") == 0) << endl; }