Exercice JAVA palindrôme - string

But:

Un palindrôme est un mot que l'on peut lire dans les deux sens. Ecrivez un programme permettant de détecter des palindrômes.

Thème:

String


Un palindrome est un mot que l'on peut lire dans les deux sens. La distinction entre majuscules/minuscules n'a aucune importance pour la lecture d'un palindrome. Si on ne tient pas compte des espaces, des virgules, des tirets et des apostrophes (i.e. les caractères ' ', ',', '-' et '\''), une phrase complète peut aussi être considérée comme un palindrome. Exemples de palindromes:

OttoElu par cette crapuleEsope reste ici et se reposeTu l'as trop ecrase, Cesar, ce Port-SalutA man, a plan, a canal, Panama

Exemples de non-palindromes:

Cours de JavaLe pont de la rivière Kwai

Ecrivez un programme Palindrome.java qui lit une chaine de caractères du clavier et qui teste s'il s'agit d'un palindrome. Exemple d'exécution:

Entrez un mot ou une phrase : Otto C'est un palindrome !

Pour ce programme, il convient d'utiliser plusieurs méthodes prédéfinies de la classe String, comme par exemple charAt(), toLowerCase() et length().

  • chaine.toLowerCase() permet de convertir tous les caratères de chaine en minuscule.
Fichiers:

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.

123456789101112131415161718192021222324252627282930313233343536373839404142import 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."); } }}
Article publié le 17 Août 2010 Mise à jour le Lundi, 31 Août 2020 15:56 par Salim KHALIL