Palindromy to wyrazy, liczby lub ciągi znaków, które czytane od przodu i od tyłu brzmią tak samo. Przykłady to „kajak”, „anna”, czy zdanie „Kobyła ma mały bok”. W programowaniu, szczególnie w Pythonie, sprawdzenie, czy dany ciąg jest palindromem, jest klasycznym zadaniem, które doskonale ilustruje operacje na stringach oraz algorytmy.
Podstawowe podejście
Najprostszy sposób na sprawdzenie palindromu w Pythonie to porównanie ciągu z jego odwróconą wersją.
Funkcja czy_palindrom działa w następujący sposób:
-
Konwertuje tekst na małe litery za pomocą
lower() -
Usuwa spacje przy użyciu
replace(" ", "") -
Porównuje oryginalny tekst z jego odwróceniem (
tekst[::-1])
Bardziej zaawansowane podejście
W praktyce palindromy mogą zawierać znaki interpunkcyjne, które powinny być ignorowane. Rozszerzmy naszą funkcję:
Wersja z użyciem wyrażeń regularnych
Dla bardziej zaawansowanego czyszczenia tekstu możemy użyć modułu re:
Wersja iteracyjna
Możemy też sprawdzać palindrom za pomocą pętli, co jest bardziej wydajne pamięciowo dla bardzo długich ciągów:
Testowanie różnych przypadków
Przetestujmy nasze funkcje na różnorodnych przykładach:
Rozszerzenie: Palindromy liczbowe
Palindromy mogą dotyczyć również liczb:
Złożoność algorytmu
Analizując efektywność naszych rozwiązań:
-
Wersja z
tekst == tekst[::-1]ma złożoność czasową O(n) i pamięciową O(n) -
Wersja iteracyjna ma złożoność czasową O(n) i pamięciową O(1) (nie tworzy odwróconej kopii)
Podsumowanie
Python oferuje wiele eleganckich sposobów na sprawdzenie, czy ciąg znaków jest palindromem. Dzięki swojej prostocie i czytelności, Python jest doskonałym językiem do implementacji tego typu algorytmów. Wybór konkretnego podejścia zależy od:
-
Wymagań dotyczących obsługi znaków specjalnych
-
Wydajności (dla bardzo długich ciągów)
-
Konkretnego przypadku użycia
Palindromy to nie tylko ciekawostka językowa, ale także doskonały przykład problemu algorytmicznego, który pozwala zilustrować różne techniki programistyczne w Pythonie.
Materiały dodatkowe: https://pl.wikipedia.org/wiki/Palindrom
Was this helpful?
0 / 0
