Palindrom - różne podejścia
1. Czym jest palindrom?
Palindrom to słowo, zdanie lub ciąg znaków, który brzmi tak samo czytany od przodu i od tyłu.
Przykłady:
✅ Słowa:
- kajak
- radar
- poziom
- potop
- noon
- racecar
✅ Zdania (ignorując spacje i znaki):
- "A man a plan a canal Panama"
- "Kobyła ma mały bok"
- "Was it a car or a cat I saw?"
✅ Liczby:
- 121
- 12321
- 1221
2. Najprostsze podejście – odwracanie stringa
2.1. Metoda 1: Slicing
Złożoność: - Czasowa: O(n) - Pamięciowa: O(n) – tworzy nowy string
3. Podejście z dwoma wskaźnikami
3.1. Bez dodatkowej pamięci:
Zalety: - O(1) pamięci ✅ - Przerywa wcześnie (gdy znajdzie różnicę)
3.2. Wizualizacja:
"kajak"
↑ ↑ left=0, right=4, k==k ✓
↑ ↑ left=1, right=3, a==a ✓
↑ left=2, right=2, STOP (left >= right)
Wynik: True
"python"
↑ ↑ left=0, right=5, p!=n ✗
Wynik: False (przerwane wcześnie!)
4. Podejście rekurencyjne
Złożoność: - Czasowa: O(n) - Pamięciowa: O(n) – stos rekurencji + nowe stringi
Uwaga: Mniej efektywne niż podejście iteracyjne.
5. Palindrom ignorując wielkość liter
6. Palindrom ignorując spacje i znaki specjalne
6.1. Czyszczenie tekstu:
6.2. Z dwoma wskaźnikami:
Zaleta: O(1) dodatkowej pamięci! ✅
7. Sprawdzanie podstringów palindromicznych
7.1. Czy dany substring jest palindromem?
7.2. Najdłuższy palindromiczny substring:
Złożoność: O(n²) czas, O(1) pamięć
8. Liczenie palindromicznych substringów
Złożoność: O(n²)
9. Palindrom liczby
9.1. Bez konwersji na string:
Złożoność: O(log n) – liczba cyfr
10. Minimalna liczba usunięć do palindromu
Złożoność: O(n²)
11. Permutacja palindromu
11.1. Sprawdzenie, czy permutacja może być palindromem:
11.2. Generowanie palindromu z permutacji:
12. Partycjonowanie na palindromy
Złożoność: O(n × 2^n)
13. Benchmark różnych metod
14. Podsumowanie
Palindrom:
- String czytany tak samo od przodu i od tyłu
- Przykłady: "kajak", "radar", "A man a plan a canal Panama"
Metody wykrywania:
| Metoda | Czas | Pamięć | Zalety |
|---|---|---|---|
Slicing s[::-1] |
O(n) | O(n) | Najprostsza |
| Dwa wskaźniki | O(n) | O(1) ✅ | Oszczędność pamięci |
| Rekurencja | O(n) | O(n) | Elegancka (ale wolniejsza) |
Implementacje podstawowe:
Problemy zaawansowane:
- Najdłuższy palindrom: O(n²) z rozszerzaniem wokół centrum
- Liczenie palindromów: O(n²)
- Minimalne usunięcia: O(n²) z LCS
- Permutacja palindromu: O(n) z liczeniem znaków
- Partycjonowanie: O(n × 2^n) z backtrackingiem
Kluczowe obserwacje:
Palindrom nieparzystej długości:
"racecar" → centrum = 'e'
←←←e→→→
Palindrom parzystej długości:
"abba" → centrum = między 'b' i 'b'
←←||→→
Warunek permutacji palindromu:
Permutacja może być palindromem gdy:
- Długość parzysta: wszystkie znaki występują parzystą liczbę razy
- Długość nieparzysta: dokładnie 1 znak występuje nieparzystą liczbę razy
Przykład: "aab" → can be palindrome (a:2, b:1)
Zastosowania:
- Walidacja danych (numery rejestracyjne, kody)
- Bioinformatyka (sekwencje DNA)
- Kompresja tekstu
- Problemy algorytmiczne (LeetCode, interviews)
Co dalej warto poznać:
- Manacher's Algorithm – najdłuższy palindrom w O(n) ✅
- Palindromiczne drzewa – zaawansowana struktura
- Palindromy w grafach – ścieżki palindromiczne
- Dynamic Programming – problemy optymalizacyjne z palindromami
- Anagramy – pokrewny problem tekstowy