Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm ký tự không chung của hai chuỗi trong C++

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.