Cho 2 chuỗi, in các ký tự chỉ xuất hiện trong 1 trong 2 chuỗi (không chung), theo thứ tự bảng chữ cái.
Ví dụ
str1 = "tutorials", str2 = "point"
Output: a l n p r s u
Thuật toán
- Mảng
freq[26]: 0=chưa thấy, 1=chỉ trong str1, 2=chỉ trong str2, -1=chung. - Duyệt str1: đánh dấu 1.
- Duyệt str2: nếu 1→-1 (chung), nếu 0→2 (chỉ str2), nếu -1→-1.
- In các ký tự có freq 1 hoặc 2.
Code C++
#include <bits/stdc++.h>
using namespace std;
void uncommonChars(string s1, string s2) {
int freq[26] = {0};
for (char c : s1) freq[c-'a'] = 1;
for (char c : s2) {
if (freq[c-'a'] == 1 || freq[c-'a'] == -1) freq[c-'a'] = -1;
else if (freq[c-'a'] == 0) freq[c-'a'] = 2;
}
for (int i = 0; i < 26; i++)
if (freq[i] == 1 || freq[i] == 2)
cout << char('a'+i) << " ";
}
int main() {
uncommonChars("tutorials", "point"); // a l n p r s u
return 0;
}
Kết quả
a l n p r s u
Độ phức tạp: O(n+m) thời gian, O(1) không gian.