Adloun

programmation Java (école d'ingénieur) · Chapitre 12 · Exercice de TD

Premier caractère non répété

Collections et génériques · niveau 2

Énoncé

Écrire static char premierNonRepete(String s) qui renvoie le premier caractère de s n'apparaissant qu'une fois, ou '-' s'il n'y en a pas. Exemples : programmation donne p, abracadabra donne c, aabb donne -. On utilisera un dictionnaire qui conserve l'ordre d'insertion, et l'on justifiera ce choix.

Corrigé


import java.util.LinkedHashMap;
import java.util.Map;

public class Exo6NonRepete {
    static char premierNonRepete(String s) {
        Map<Character, Integer> compte = new LinkedHashMap<>();
        for (char c : s.toCharArray()) {
            compte.put(c, compte.getOrDefault(c, 0) + 1);
        }
        for (Map.Entry<Character, Integer> e : compte.entrySet()) {
            if (e.getValue() == 1) return e.getKey();
        }
        return '-';                                     // aucun caractère unique
    }
    public static void main(String[] args) {
        System.out.println(premierNonRepete("programmation"));
        System.out.println(premierNonRepete("abracadabra"));
        System.out.println(premierNonRepete("aabb"));
    }
}

p
c
-

Un LinkedHashMap parcourt ses clés dans l'ordre de leur première insertion, c'est-à-dire de leur première apparition dans la chaîne : la première clé de compte rencontrée est bien le premier caractère non répété. Avec un HashMap, l'ordre serait imprévisible. Le programme fait deux parcours, de la chaîne puis du dictionnaire : son temps est proportionnel à la longueur de la chaîne.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →