Computer >> Máy Tính >  >> Lập trình >> C ++

Các bảng chữ cái viết thường khác biệt tối đa giữa hai chữ hoa trong C ++

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