[Précédent]
[Index] | [Enoncé] | [Version imprimable]
[Prochain]

4.8
  Palindrôme - Corrigé
Niveau 2
 
 
Fichiers:
  Palindrome.java    

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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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 ne garde que les caractères alphabétiques
        String temp = "";
        for (int i = 0; i < original.length(); i++) {
            char c = original.charAt(i);
            if (Character.isLetter(c)) {
                temp += c;
            }
        }

        // On convertit en minuscules pour éviter
        // les problèmes de casse:
        String test = temp.toLowerCase();

        // On teste si mot2 est un palindrome
        int leftPos = 0;
        int rightPos = test.length() - 1;
        boolean palindrome=true;

        while ((leftPos < rightPos) && palindrome) {
            palindrome = test.charAt(leftPos) == test.charAt(rightPos);
            leftPos++;
            rightPos--;
        }

        if (palindrome) {
            System.out.println("C'est un palindrôme !");
        } else {
            System.out.println("Non, ce n'est pas un palindrôme.");
        }
    }
}

 


[Précédent]
[Index] | [Enoncé] | [Version imprimable]
[Prochain]