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

Kiểm tra hai chuỗi có phải anagram nhau không C++


Hai chuỗi là anagram nếu chúng chứa cùng các ký tự với cùng tần suất (thứ tự có thể khác). Ví dụ:

Đầu vào 1: "anagram" và "gnarama" → True.

Đầu vào 2: "programmer" và "mprogretmrqp" → False (độ dài khác).

Phương pháp: Hashmap (unordered_map)

  • Nếu độ dài khác → false.
  • Duyệt chuỗi a: tăng đếm ký tự. Duyệt chuỗi b: giảm đếm.
  • Kiểm tra map: nếu mọi giá trị đều 0 → true, ngược lại false.

Ví dụ mã nguồn

#include <bits/stdc++.h>
using namespace std;

bool checkAnagram(string a, string b) {
    if (a.size() != b.size()) return false;
    unordered_map<char,int> mp;
    for (char c : a) mp[c]++;
    for (char c : b) mp[c]--;
    for (auto &p : mp) if (p.second != 0) return false;
    return true;
}

int main() {
    string a = "anagram", b = "gnarama";
    cout << (checkAnagram(a,b) ? "True" : "False") << endl;
    return 0;
}

Kết quả

True

Phương pháp chạy O(n) thời gian, O(1) không gian (chỉ 256 ký tự ASCII).