Nhiệm vụ được giao là tìm số lượng tối đa các bảng chữ cái viết thường phân biệt có giữa hai bảng chữ cái viết hoa trong chuỗi đã cho.
Bây giờ chúng ta hãy hiểu những gì chúng ta phải làm bằng cách sử dụng một ví dụ -
Đầu vào
str = “JKyubDoorG”
Đầu ra
3
Giải thích
“Yub” nằm giữa hai bảng chữ cái viết hoa K và D tạo nên số đếm 3.
“Oor” cũng có mặt giữa hai bảng chữ cái viết hoa D và G, làm cho số đếm 2 vì ‘o’ là một bảng chữ cái lặp lại và chúng tôi đang tìm kiếm các bảng chữ cái riêng biệt.
Do đó, sản lượng là 3.
Đầu vào
str = “ABcefsTaRpaep”
Đầu ra
4
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau
-
Trong hàm Max () khởi tạo int size =s.length () để lưu trữ độ dài của chuỗi đã cho.
-
Lặp lại từ i =0 đến i
='A' &&s [i] <='Z'). Nếu vậy thì tăng I và phá vỡ; -
Khởi tạo int ans =0 để lưu trữ câu trả lời cuối cùng và một mảng khác cnt [26] ={0}.
-
Lặp lại từ i =0 đến i
='A' &&s [i] <='Z') để kiểm tra xem bảng chữ cái hiện tại có viết hoa không. Nếu vậy, hãy khởi tạo int CurrMax =0 để lưu trữ giá trị lớn nhất hiện tại. -
Lặp lại từ i =0 đến i <26 và kiểm tra xem (cnt [i]> 0). Nếu vậy, hãy tăng CurrMax.
-
Bên ngoài vòng lặp for, hãy cập nhật ans bằng cách đặt ans =max (ans, CurrMax); và đặt lại mảng cnt [] bằng cách sử dụng memset (cnt, 0, sizeof (cnt));
-
Đóng câu lệnh if () ở trên và kiểm tra if (s [i]> ='a' &&s [i] <='z'). Nếu vậy thì tăng cnt [s [i] - 'a'].
-
Đóng vòng lặp for và trả về ans.
Ví dụ
#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; }
Đầu ra
3