Trong hướng dẫn này, ta sẽ học cách tìm các ký tự khác biệt từ hai chuỗi cho trước. Hãy xem ví dụ.
Đầu vào
string_one = "tutorialspoint" string_two = "tutorialsworld"
Đầu ra
d n p w
Ta sẽ dùng hashing để giải quyết, hiệu quả hơn hai vòng lặp lồng nhau.
Hãy xem các bước giải quyết.
- Khởi tạo hai chuỗi với giá trị ngẫu nhiên.
- Khởi tạo map: map<char, int> chars.
- Duyệt chuỗi thứ nhất, chèn mỗi ký tự vào map với giá trị 1.
- Duyệt chuỗi thứ hai.
- Kiểm tra ký tự đã có trong map chưa.
- Nếu có, gán giá trị 0.
- Nếu chưa, chèn ký tự với giá trị 1.
- Duyệt map, in các ký tự có giá trị 1.
Ví dụ
Xem mã dưới đây:
#include <bits/stdc++.h> #include <map> using namespace std; void findDistinctCharacters(string one, string two){ // khởi tạo sự hiện diện ký tự trong chuỗi map<char, int> chars; // duyệt chuỗi thứ nhất for (int i = 0; i < one.size(); ++i){ // chèn mỗi ký tự vào map chars.insert({one[i], 1}); } // duyệt chuỗi thứ hai for (int i = 0; i < two.size(); ++i){ // kiểm tra ký tự hiện tại có trong map không if (chars.count(two[i])) { // gán 0 cho ký tự chung chars.find(two[i])->second = 0; } else { // chèn ký tự mới chars.insert({two[i], 1}); } } // in các ký tự khác biệt for (auto item: chars){ // kiểm tra sự hiện diện if (item.second == 1) { // in ký tự khác biệt cout << item.first << " "; } } } int main(){ string one = "tutorialspoint"; string two = "tutorialsworld"; findDistinctCharacters(one, two); return 0; }
Đầu ra
Nếu chạy mã trên, bạn sẽ nhận được kết quả sau:
d n p w
Kết luận
Nếu bạn có thắc mắc, hãy đề cập trong phần bình luận.