Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวอักษรพิมพ์เล็กที่แตกต่างกันสูงสุดระหว่างตัวอักษรพิมพ์ใหญ่ 2 ตัวใน C++

ภารกิจคือการหาจำนวนสูงสุดของตัวอักษรพิมพ์เล็กที่แตกต่างกัน (distinct lowercase alphabets) ที่อยู่ระหว่างตัวอักษรพิมพ์ใหญ่ 2 ตัวในสตริงที่กำหนด

ตัวอย่าง

อินพุต

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++ และ break (ข้ามตัวพิมพ์เล็กนำหน้า)
  • เริ่มต้น 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++
  • นอกลูป อัปเดต ans = max(ans, CurrMax) และ reset cnt[] ด้วย memset(cnt, 0, sizeof(cnt))
  • ปิด if ตัวพิมพ์ใหญ่ ตรวจสอบ if (s[i] >= 'a' && s[i] <= 'z') ถ้าใช่ cnt[s[i] - 'a']++
  • ปิดลูป คืนค่า 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