โจทย์
ให้สองสตริง ต้องการหาตัวอักษรที่ซ้ำกันในทั้งสองสตริง และพิมพ์ตามลำดับ 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