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
01.
/**
02.
* Zjisti, zda-li je testovany retezec palindromem
03.
* @param tested testovany retezec
04.
* @param ignoreLetterCase priznak ignorace velikosti pismen. true - velikost
05.
* pismen bude ignorovana, false - velikost pismen hraje roli
06.
* @param ignoreWhitespaces priznak ignorace bilych znaku. true - bile znaky
07.
* budou ignorovany, false - bile znaky hraji roli
08.
* @param ignoreDiacritics priznak ignorace diakritiky. true - diakritika bude
09.
* ignorovana, false - diakritika hraje roli
10.
* @return true pokud je testovane slovo palindromem, false pokud palindromem neni
11.
*/
12.
public
static
boolean
isPalindrome(String tested,
boolean
ignoreLetterCase,
boolean
ignoreWhitespaces,
boolean
ignoreDiacritics){
13.
if
(ignoreLetterCase){
14.
tested = tested.toLowerCase();
15.
}
16.
if
(ignoreWhitespaces){
17.
tested = tested.replaceAll(
"\\\\s"
,
""
);
//nahrad bile znaky prazdnym retezcem
18.
}
19.
if
(ignoreDiacritics){
20.
tested = Normalizer.normalize(tested, Form.NFD).replaceAll(
"\\\\p{InCombiningDiacriticalMarks}+"
,
""
);
//dekomponuj znak a odstran diakritickou cast
21.
}
22.
23.
//vyzkousej, jesli se retezec pise z obou stran stejne (pokud ma lichou delku, tak prostredni znak testovat nemusime)
24.
for
(
int
i =
0
; i < tested.length()/
2
; i++){
25.
if
(tested.charAt(i) != tested.charAt(tested.length() -
1
- i)){
26.
return
false
;
27.
}
28.
}
29.
30.
return
true
;
31.
}