Hai chuỗi gọi là anagram nếu chúng chứa cùng các ký tự với tần suất xuất hiện như nhau (không quan tâm thứ tự).
Ví dụ
abcdvàbdac→ Anagram.programmingvàgramming→ Không phải anagram.
Thuật toán
- Đếm tần suất mỗi chữ cái (a-z) trong chuỗi 1 → mảng
first[26]. - Đếm tần suất chuỗi 2 → mảng
second[26]. - So sánh 2 mảng. Nếu giống hệt nhau → Anagram.
Chương trình C
#include <stdio.h>
int check_anagram(char [], char []);
int main() {
char a[1000], b[1000];
printf("Nhập hai chuỗi:\n");
gets(a); gets(b);
if (check_anagram(a, b))
printf("Hai chuỗi là anagram.\n");
else
printf("Hai chuỗi KHÔNG phải anagram.\n");
return 0;
}
int check_anagram(char a[], char b[]) {
int first[26] = {0}, second[26] = {0}, c = 0;
while (a[c] != '\0') { first[a[c]-'a']++; c++; }
c = 0;
while (b[c] != '\0') { second[b[c]-'a']++; c++; }
for (c = 0; c < 26; c++)
if (first[c] != second[c]) return 0;
return 1;
}
Kết quả
Run 1: abcdef / deabcf -> Anagram Run 2: tutorials / Point -> Không anagram