C++中两个大写字母之间最多不同的的小写字母
给定任务是在给定的字符串中找到两个大写字母之间存在最大数量的不同小写字母。
让我们用一个例子来理解我们必须做什么:
输入
str = “JKyubDoorG”
输出
3
解释
“yub”位于两个大写字母K和D之间,计数为3。
“oor”也位于两个大写字母D和G之间,计数为2,因为‘o’是重复的字母,我们正在寻找不同的字母。
因此,输出为3。
输入
str = “ABcefsTaRpaep”
输出
4
下面程序中使用的算法如下:
在函数Max()中,初始化int **size** = s.length() 来存储给定字符串的长度。
循环从i = 0到i<size,并检查if (s[i] >= 'A' && s[i] <= 'Z')。如果是,则递增 **I** 并中断;
初始化int **ans** = 0 来存储最终答案,另一个数组cnt[26] = {0}。
循环从i = 0到i<size,然后检查if (s[i] >= 'A' && s[i] <= 'Z') 来检查当前字母是否为大写字母。如果是,则初始化int **CurrMax** = 0 来存储当前最大值。
循环从i = 0到i<26,并检查if (cnt[i] > 0)。如果是,则递增CurrMax。
在for循环之外,通过ans = max(ans, CurrMax);更新 **ans**,并使用memset(cnt, 0, sizeof(cnt));重置cnt[]数组。
关闭上面的if()语句,并检查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(); // Ignore the lowercase alphabets in beginning 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 alphabet is uppercase, if (s[i] >= 'A' && s[i] <= 'Z'){ //Counting all lower case //distinct alphabets int CurrMax = 0; for (int i = 0; i < 26; i++){ if (cnt[i] > 0) CurrMax++; } // Update ans ans = max(ans, CurrMax); // Reset count array memset(cnt, 0, sizeof(cnt)); } // If alphabet is lowercase if (s[i] >= 'a' && s[i] <= 'z') cnt[s[i] - 'a']++; } return ans; } // Driver function int main(){ string str = "JKyubDoorG"; cout << Max(str); return 0; }
输出
3
广告