Trong bài toán này, chúng ta được cho một chuỗi. Nhiệm vụ là in tất cả các ký tự riêng biệt của chuỗi theo thứ tự chúng xuất hiện.
Ví dụ để hiểu vấn đề:
Đầu vào: tutorials Point → Đầu ra: uralsPn
Có nhiều cách giải quyết nhưng ta thảo luận cách hiệu quả nhất. Cách đơn giản bao gồm lồng vòng lặp.
Ta sử dụng hai mảng kích thước 256 (lưu ký tự 8-bit).
Khởi tạo tất cả giá trị mảng đếm = 0 và mảng chỉ mục = n (độ dài chuỗi). Duyệt chuỗi str và với mỗi ký tự c, tăng count[x]. Nếu count[x] = 1, index[x] = i. Nếu count[x] = 2, index[x] = n. Sắp xếp chỉ mục và in ký tự.
Ví Dụ
Mã minh họa giải pháp:
#include <bits/stdc++.h>
using namespace std;
const int MAX_CHAR = 256;
void printDistinctCharacters(string str) {
int n = str.length();
int count[MAX_CHAR];
int index[MAX_CHAR];
for (int i = 0; i < MAX_CHAR; i++) {
count[i] = 0;
index[i] = n;
}
for (int i = 0; i < n; i++) {
char x = str[i];
++count[x];
if (count[x] == 1 && x != ' ')
index[x] = i;
if (count[x] == 2)
index[x] = n;
}
sort(index, index + MAX_CHAR);
for (int i = 0; i < MAX_CHAR && index[i] != n; i++)
cout << str[index[i]] << " ";
}
int main() {
string str = "tutorialsPoint";
cout << "Tất cả ký tự riêng biệt của chuỗi '" << str << "' là:\n";
printDistinctCharacters(str);
return 0;
}
Đầu Ra
Tất cả ký tự riêng biệt của chuỗi 'tutorialsPoint' là: u r a l s P n