Cho 2 chuỗi, tạo chuỗi mới chứa các ký tự chỉ xuất hiện ở 1 trong 2 chuỗi (không chung). Ví dụ: "hafeez" và "kareem" → "hfzkrm".
Thuật toán
- Khởi tạo chuỗi kết quả rỗng.
- Duyệt chuỗi 1: nếu ký tự không có trong chuỗi 2 → thêm vào kết quả.
- Duyệt chuỗi 2: nếu ký tự không có trong chuỗi 1 → thêm vào kết quả.
- In kết quả.
Mã nguồn
string_1 = "hafeez"
string_2 = "kareem"
new_string = ""
# Ký tự chỉ ở string_1
for ch in string_1:
if ch not in string_2:
new_string += ch
# Ký tự chỉ ở string_2
for ch in string_2:
if ch not in string_1:
new_string += ch
print(f"New String: {new_string}")Kết quả
New String: hfzkrm
Cách tối ưu với Set (O(n+m))
set1 = set(string_1) set2 = set(string_2) # Symmetric difference: phần tử chỉ ở 1 trong 2 set unique_chars = set1 ^ set2 # hoặc set1.symmetric_difference(set2) # Giữ thứ tự xuất hiện (nếu cần) result = ''.join([ch for ch in string_1 + string_2 if ch in unique_chars]) print(result) # hfzkrm (thứ tự: h,f,z,k,r,m)
So sánh
| Cách | Độ phức tạp | Giữ thứ tự | Lưu ý |
|---|---|---|---|
Loop + in string | O(n*m) | Có | Chậm nếu chuỗi dài |
| Set symmetric diff | O(n+m) | Không (set unordered) | Nhanh, cần sort/order thêm |
| Set + list comprehension | O(n+m) | Có | Cân bằng tốt |
Kết luận
Dùng Set cho hiệu năng, list comprehension để giữ thứ tự. Bài toán liên quan: tìm ký tự chung (intersection), hợp (union).