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; }