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
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.