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).