Nous utilisons ici le fait que si une chaine s est un palindrôme, la relation suivante est vérifiée pour tout i: s[i] = s[longeur de s - i]. L’algorithme procède alors comme suit: on parcourt la chaine dans les deux sens en même temps: l’indice p1 sert à parcourir la chaine du début à la fin et l’indice p2 sert à parcourir la chaine de la fin au début. On compare à chaque étape la chaine à l’indice p1 et l’indice p2.
Si c’est le même caractère on progresse, sinon le mot n’est pas un palindrôme. On prend soin, en cours de parcours, de sauter les séparateurs. On s’arrête autrement quand p1 et p2 se rejoignent. Le mot est alors un palindrôme.
import java.util.Scanner; class Palindrome { private static Scanner scanner = new Scanner(System.in); public static void main (String args[]) { System.out.print("Entrez un original ou une phrase : "); String original = scanner.nextLine(); // On convertit l'original en minuscules pour éviter // les problèmes de casse: String test = original.toLowerCase(); // On ne garde que les caractères alphabétiques String allowedList = "abcdefghijklmnopqrstuvwxyz"; String temp = ""; for (int i = 0; i < test.length(); i++) { char c = test.charAt(i); if (allowedList.indexOf(c) != -1) { temp += c; } } test = temp; // On teste si mot2 est un palindrôme int leftPos = 0; int rightPos = test.length() - 1; boolean palindrome=true; while ((leftPos < rightPos) && palindrome) { if (test.charAt(leftPos) != test.charAt(rightPos)) { palindrome=false; } leftPos++; rightPos--; } if (palindrome) { System.out.println("C'est un palindrôme !"); } else { System.out.println("Non, ce n'est pas un palindrôme."); } } }
un bon cours