- 2 kwietnia 2026
- Posted by: Damian
- Category: Baza wiedzy

Anagramy często pojawiają się na maturze z informatyki. Jest to więc temat, z którym dobrze jest się zapoznać, jeśli czeka Cię egzamin maturalny z tego przedmiotu. Poniżej zobaczysz na jakiej zasadzie działa sprawdzanie anagramów, a także jak wygląda implementacja algorytmu w ramach Python, C++ i Java.
Co to anagramy – definicja
Anagramy to pojęcie często pojawiające się na maturze. Są to wyrazy lub zdania, które po przestawieniu liter tworzą inny wyraz lub inne zdanie.
Anagramy przykłady
- kot – tko
- stół – tłós
- marz – zamr
- raty – tyra
Sprawdzanie, czy jeden wyraz jest anagramem drugiego, można wykonać na kilka sposobów. Najprostszym, lecz czasochłonnym, jest sprawdzenie wszystkich permutacji liter. Inną metodą jest sortowanie liter w obu napisach i porównanie wyników — jednak takie rozwiązanie bywa mało wydajne, a w pseudokodzie maturalnym często nie ma dostępu do funkcji sortujących.
Najefektywniejszą metodą, często używaną na maturze, jest zliczanie wystąpień liter w dwóch napisach. Wystarczy użyć tablicy o 26 elementach (dla liter alfabetu angielskiego) i kodów ASCII. Odejmując kod litery ‘a’ od kodu danej litery, uzyskujemy jej pozycję w alfabecie (czyli indeks tablicy).
Sprawdzanie anagramów – Implementacja
Dzięki wykorzystaniu możliwości liczenia poszczególnych znaków, możliwe jest szybkie i efektywne sprawdzenie, czy jeden ciąg jest przestawieniem drugiego, a więc jego anagramem.
Sprawdzanie anagramów – pseudokod
Dane:
- napis1 – pierwszy napis o długości n1, zawiera tylko małe litery alfabetu angielskiego
- napis2 – drugi napis o długości n2, zawiera tylko małe litery alfabetu angielskiego
Wynik:
- czyAnagram – wartość logiczna: prawda lub fałsz, w zależności od tego, czy napis1 i napis2 są anagramami
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | zliczacz1 ← [1..26] zliczacz2 ← [1..26] dla i = 1,2 ... 26 wykonuj zliczacz1[i]←0 zliczacz2[i]←0 dla i = 1,2 ... n1 wykonuj zliczacz1[kodASCII(napis1[i]-kodASCII('a')+1]←zliczacz1[kodASCII(napis1[i]-kodASCII('a')+1]+1 dla i = 1,2 ... n2 wykonuj zliczacz2[kodASCII(napis2[i]-kodASCII('a')+1]←zliczacz2[kodASCII(napis2[i]-kodASCII('a')+1]+1 czyAnagram ← prawda dla i = 1,2 … 26 wykonuj jezeli zliczacz1[i] ≠ zliczacz2[i] czyAnagram ← fałsz zwróć czyAnagram zwróć czyAnagram |
Opis sprawdzania anagramów – Pseudokod
- 1 linia – inicjalizacja tablicy zliczacz1 o długości 26, służącej do zliczania wystąpień liter w pierwszym napisie.
- 2 linia – inicjalizacja tablicy zliczacz2 o długości 26, służącej do zliczania wystąpień liter w drugim napisie.
- 3 linia – rozpoczęcie pętli dla i = 1 do 26 w celu wyzerowania wszystkich elementów tablicy zliczacz1.
- 4 linia – ustawienie elementu zliczacz1[i] na 0.
- 5 linia – ustawienie elementu zliczacz2[i] na 0.
- 6 linia – rozpoczęcie pętli dla i = 1 do n1, aby przejść po wszystkich literach pierwszego napisu.
- 7 linia – zwiększenie odpowiedniego elementu w tablicy zliczacz1 w zależności od kodu ASCII aktualnej litery napisu1.
- 8 linia – rozpoczęcie pętli dla i = 1 do n2, aby przejść po wszystkich literach drugiego napisu.
- 9 linia – zwiększenie odpowiedniego elementu w tablicy zliczacz2 w zależności od kodu ASCII aktualnej litery napisu2.
- 10 linia – inicjalizacja zmiennej czyAnagram jako prawda, zakładając początkowo, że napisy są anagramami.
- 11 linia – rozpoczęcie pętli dla i = 1 do 26 w celu porównania liczby wystąpień każdej litery w obu napisach.
- 12 linia – sprawdzenie, czy liczba wystąpień danej litery w zliczacz1 jest różna od liczby w zliczacz2.
- 13 linia – jeśli liczby są różne, ustawienie czyAnagram na fałsz, ponieważ napisy nie są anagramami.
- 14 linia – natychmiastowe zwrócenie wartości czyAnagram po wykryciu różnicy.
- 15 linia – zwrócenie wartości czyAnagram po zakończeniu pętli, jeśli wszystkie litery występują w tej samej liczbie w obu napisach.
Sprawdzanie anagramów – Python, C++ i Java
Sprawdzanie anagramów – Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | def czyAnagram(napis1, napis2): zliczacz1 = [0] * 26 zliczacz2 = [0] * 26 for litera in napis1: if 'a' <= litera <= 'z': zliczacz1[ord(litera) - ord('a')] += 1 for litera in napis2: if 'a' <= litera <= 'z': zliczacz2[ord(litera) - ord('a')] += 1 for i in range(26): if zliczacz1[i] != zliczacz2[i]: return False return True napis1 = "kot" napis2 = "tok" if czyAnagram(napis1, napis2): print(f"'{napis1}' i '{napis2}' są anagramami.") else: print(f"'{napis1}' i '{napis2}' nie są anagramami.") |
Sprawdzanie anagramów – C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include <iostream> #include <string> using namespace std; bool czyAnagram(string napis1, string napis2) { int zliczacz1[26] = {0}; int zliczacz2[26] = {0}; for (char ch : napis1) { if (ch >= 'a' && ch <= 'z') zliczacz1[ch - 'a']++; } for (char ch : napis2) { if (ch >= 'a' && ch <= 'z') zliczacz2[ch - 'a']++; } for (int i = 0; i < 26; ++i) { if (zliczacz1[i] != zliczacz2[i]) return false; } return true; } int main() { string napis1 = "kot"; string napis2 = "tok"; if (czyAnagram(napis1, napis2)) cout << "'" << napis1 << "' i '" << napis2 << "' są anagramami." << endl; else cout << "'" << napis1 << "' i '" << napis2 << "' nie są anagramami." << endl; return 0; } |
Sprawdzanie anagramów – Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | public class Main { public static boolean czyAnagram(String napis1, String napis2) { int[] zliczacz1 = new int[26]; int[] zliczacz2 = new int[26]; for (int i = 0; i < napis1.length(); i++) { char ch = napis1.charAt(i); if (ch >= 'a' && ch <= 'z') zliczacz1[ch - 'a']++; } for (int i = 0; i < napis2.length(); i++) { char ch = napis2.charAt(i); if (ch >= 'a' && ch <= 'z') zliczacz2[ch - 'a']++; } for (int i = 0; i < 26; i++) { if (zliczacz1[i] != zliczacz2[i]) return false; } return true; } public static void main(String[] args) { String napis1 = "kot"; String napis2 = "tok"; if (czyAnagram(napis1, napis2)) System.out.println("'" + napis1 + "' i '" + napis2 + "' są anagramami."); else System.out.println("'" + napis1 + "' i '" + napis2 + "' nie są anagramami."); } } |
W przypadku pojawienia się wielkich liter należy albo wszystkie duże litery traktować jak małe i zliczać je jako małe np. funkcja lower() w pythonie służy właśnie do tego. Można też zwiększyć 2 razy naszą tablicę (lub zrobić 2 osobne) i odpowiednio odejmować kod ASCII litery ‘a’ lub ‘A’, jednak jest to trochę niepraktyczne. Jeśli interesują Cię lepsze metody zliczania elementów, w tym liter możesz przeczytać nasz artykuł o zliczaniu liter.
Najczęściej zadawane pytania o anagramy
Jakie są przykłady anagramów?
Przykłady anagramów:
- drzewo – wozerd
- książka – kasiżąk
- samochód – dósamohc
- jabłko – okjałb
- przyjaciel – leirzypajc


