给定任务是找到给定字符串中两个大写字母之间存在的最大不同小写字母数量。
现在让我们使用示例了解我们必须做的事情-
str = “JKyubDoorG”
输出结果
3
“ yub”出现在两个大写字母K和D之间,使计数为3。
在两个大写字母D和G之间也存在“ oor”,这使计数2为“ o”是重复字母,我们正在寻找不同的字母。
因此,输出为3。
str = “ABcefsTaRpaep”
输出结果
4
在函数中,Max()
初始化int size = s.length()以存储给定字符串的长度。
从i = 0循环直到i <size,然后检查是否(s [i]> ='A'&& s [i] <='Z')。如果是这样,则增加I并中断;
初始化int ans = 0以存储最终答案,并初始化另一个数组cnt [26] = {0}。
从i = 0循环直到i <size,然后检查(s [i]> ='A'&& s [i] <='Z')是否检查当前字母是否为大写。如果是这样,则初始化int CurrMax = 0以存储当前的最大值。
从i = 0循环直到i <26,然后检查(cnt [i]> 0)。如果是这样,则增加CurrMax。
在for循环之外,通过添加ans = max(ans,CurrMax);更新ans。并使用memset(cnt,0,sizeof(cnt))重置cnt []数组;
关闭上面的if()
语句,并检查是否(s [i]> ='a'&& s [i] <='z')。如果是这样,则增加cnt [s [i]-'a']。
关闭for循环并返回ans。
#include <bits/stdc++.h> using namespace std; int Max(string s){ int size = s.length(); //忽略开头的小写字母 for (int i = 0; i < size; i++){ if (s[i] >= 'A' && s[i] <= 'Z'){ i++; break; } } int ans = 0; int cnt[26] = { 0 }; for (int i = 0; i < size; i++) { //如果字母是大写字母, if (s[i] >= 'A' && s[i] <= 'Z'){ //计算所有小写字母 //不同的字母 int CurrMax = 0; for (int i = 0; i < 26; i++){ if (cnt[i] > 0) CurrMax++; } //更新ans- ans = max(ans, CurrMax); //重置计数数组 memset(cnt, 0, sizeof(cnt)); } //如果字母是小写 if (s[i] >= 'a' && s[i] <= 'z') cnt[s[i] - 'a']++; } return ans; } //驱动功能 int main(){ string str = "JKyubDoorG"; cout << Max(str); return 0; }
输出结果
3