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







Doporučujeme