โจทย์: กำหนด 2 strings หาตัวอักษรที่ปรากฏใน string ไหน string หนึ่งเท่านั้น (ไม่ปรากฏในทั้งคู่) เรียงลำดับ a-z
ตัวอย่าง: "tutorials", "point" → a l n p r s u
อัลกอริธึม: Frequency Array
- Array
freq[26]= 0
2. Scan str1: - ถ้า freq = 1 หรือ -1 → set -1 (common)
- ถ้า freq = 0 → set 2 (only in str2)
freq[c-'a'] = 1
3. Scan str2:
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
const int LIM = 26;
void calculateUncommonCharacters(string str1, string str2) {
int freq[LIM] = {0};
for (char c : str1) freq[c - 'a'] = 1;
for (char c : str2) {
if (freq[c - 'a'] == 1 || freq[c - 'a'] == -1) freq[c - 'a'] = -1;
else freq[c - 'a'] = 2;
}
for (int i = 0; i < LIM; i++)
if (freq[i] == 1 || freq[i] == 2)
cout << char(i + 'a') << " ";
}
int main() {
calculateUncommonCharacters("tutorials", "point");
}
อินพุต
"tutorials", "point"
เอาต์พุท
a l n p r s u
Complexity
- Time: O(N + M)
- Space: O(1) (fixed 26)