Palindrom je libovolná posloupnost symbolů, která je stejná (má stejný význam) při čtení z obou stran (zleva doprava i zprava doleva). Při posuzování palindromatičnosti vět obvykle vynecháváme členící znaménka a ignorujeme velikost jednotlivých písmen.
Mezi základní typy palindromů patří slova (kajak, radar, oko, madam, rotor...), věty (Kobyla má malý bok, Jelenovi pivo nelej, Kuna nese nanuk...), čísla (99, 191, 112211...) a data (01/02/2010, 10/12/2101...).
Kód
/**
* Zjisti, zda-li je testovany retezec palindromem
* @param tested testovany retezec
* @param ignoreLetterCase priznak ignorace velikosti pismen. true - velikost
* pismen bude ignorovana, false - velikost pismen hraje roli
* @param ignoreWhitespaces priznak ignorace bilych znaku. true - bile znaky
* budou ignorovany, false - bile znaky hraji roli
* @param ignoreDiacritics priznak ignorace diakritiky. true - diakritika bude
* ignorovana, false - diakritika hraje roli
* @return true pokud je testovane slovo palindromem, false pokud palindromem neni
*/
public static boolean isPalindrome(String tested, boolean ignoreLetterCase, boolean ignoreWhitespaces, boolean ignoreDiacritics){
if(ignoreLetterCase){
tested = tested.toLowerCase();
}
if(ignoreWhitespaces){
tested = tested.replaceAll("\\\\s", ""); //nahrad bile znaky prazdnym retezcem
}
if(ignoreDiacritics){
tested = Normalizer.normalize(tested, Form.NFD).replaceAll("\\\\p{InCombiningDiacriticalMarks}+", ""); //dekomponuj znak a odstran diakritickou cast
}
//vyzkousej, jesli se retezec pise z obou stran stejne (pokud ma lichou delku, tak prostredni znak testovat nemusime)
for(int i = 0; i < tested.length()/2; i++){
if(tested.charAt(i) != tested.charAt(tested.length() - 1 - i)){
return false;
}
}
return true;
}