Nhiệm vụ: tìm số lượng chữ cái thường khác nhau tối đa xuất hiện giữa hai chữ hoa trong xâu cho trước.
Ví dụ 1
Đầu vào** –
str = "JKyubDoorG"
Đầu ra** – 3
Giải thích** – "yub" giữa K và D → 3 ký tự khác nhau. "oor" giữa D và G → 2 ký tự khác nhau (o lặp). Max = 3.
Ví dụ 2
Đầu vào** –
str = "ABcefsTaRpaep"
Đầu ra** – 4
Phương pháp
- Bỏ qua chữ thường ở đầu xâu cho đến chữ hoa đầu tiên.
- Duyệt xâu, gặp chữ hoa: đếm chữ thường khác nhau kể từ chữ hoa trước (dùng mảng cnt[26]), cập nhật ans, reset cnt.
- Gặp chữ thường: tăng cnt[ch-'a'].
Ví dụ
#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 = 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;
}
Đầu ra
3