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

พิมพ์ตัวอักษรร่วมของสองสตริงเรียง A-Z ใน C++

โจทย์

ให้สองสตริง ต้องการหาตัวอักษรที่ซ้ำกันในทั้งสองสตริง และพิมพ์ตามลำดับ A-Z (Lexicographical) พร้อมจำนวนครั้งที่น้อยกว่า (min count) ถ้าไม่มีร่วมกันพิมพ์ "NO COMMON CHARACTERS"

ตัวอย่าง

string1: "adsfhslf", string2: "fsrakf" → Output: "affs" (a:1, f:2, s:1)

string1: "abcde", string2: "glhyte" → Output: "No common characters"

อัลกอริทึม

Step 1: สร้างอาร์เรย์ a1[26], a2[26] นับความถี่แต่ละสตริง
Step 2: ลูป i=0..25 ถ้า a1[i]>0 และ a2[i]>0 พิมพ์ตัวอักษร ('a'+i) จำนวน min(a1[i], a2[i]) ครั้ง

ตัวอย่างโค้ด C++

#include <bits/stdc++.h>
using namespace std;

int main() {
    string string1 = "adjfrdggs";
    string string2 = "gktressd";
    cout << "The strings are " << string1 << " and " << string2;
    cout << "\nThe common characters are: ";
    int a1[26] = {0};
    int a2[26] = {0};
    for (int i = 0; i < string1.length(); i++) a1[(int)string1[i] - 'a']++;
    for (int i = 0; i < string2.length(); i++) a2[(int)string2[i] - 'a']++;
    for (int i = 0; i < 26; i++) {
        if (a1[i] != 0 && a2[i] != 0) {
            for (int j = 0; j < min(a1[i], a2[i]); j++)
                cout << char('a' + i);
        }
    }
    return 0;
}

ผลลัพธ์

The strings are adjfrdggs and gktressd
The common characters are: dgrs