Skoro to jeden ciąg znaków, to inaczej się trzeba wziąć do sprawy.
Zwróć uwagę Bracie, że każdy ciąg o długości 2 będzie palindromem jeśli oba znaki są te same. Natomiast w ciągach dłuższych minimalna próbka pozwalająca zweryfikować palindrom to 3. Zatem algorytm wyglądałby jakoś tak:
- ciąg.długość == 2 ? => sprawdzasz czy oba znaki są takie same. Jak są to palindrom. Dzięki Bracie @Delor za sprostowanie.
- ciąg.długość >= 3? ustaw wskaźnik na element o indeksie index = 1
- sprawdź czy znak będący na index - 1 == index + 1.
3a) Odpowiedź pozytywna => jest palindrom
3b) Odpowiedź negatywna => index++, sprawdź, czy index + 1 < ciąg.size, jeśt tak to powtóż krok 3, jeśli nie => zakończ szukanie z odpowiedzią "nie ma palindromu"
Przykłady:
oko => wiadomo
kajak => wskaźnik na a, i na pozycji o 1 w lewo jest k, a na pozycji o 1 w prawo j. Nie ma palindromu, to wskaźnik na j, i powtórka -> teraz z obu stron jest a, więc palindrom
abcbaz => wskaźnik na b, na lewo o 1 a, na prawo o 1 c. Nope, przestawiamy wskaźnik o 1 w prawo, i teraz palindrom bcb zostanie wykryty.
Algortym można rozwinąć, aby po wykryciu 3-elementowego zalążka palindromu sprawdzał, jak daleko się on rozciąga, a także aby wyszukiwał ile palindromów w podanym ciągu znalazł.
EDIT:
Aaaa,jeszcze trzeba rozważyć taki przypadek:
abbadon
powinien zostać wykryty jako palindrom, a powyższy algorytm na nim polegnie. Poprawka do kroku 3 to dodać kolejny warunek:
[index - 1] == [index]