programmation Java (école d'ingénieur) · Chapitre 12 · Application directe du cours
Expression bien parenthésée
Collections et génériques · niveau 2
Énoncé
Une expression est bien parenthésée si chaque parenthèse, crochet ou accolade ouvrant est refermé par le symbole fermant correspondant, dans le bon ordre : {[()()]} l'est, (] et ((x) ne le sont pas. Écrire static boolean bienParenthesee(String s) à l'aide d'une pile Deque<Character>, et la tester sur (a+b)*[c-d], {[()()]}, (], ((x), a)(b et la chaîne vide.
Corrigé
On lit la chaîne de gauche à droite. Un symbole ouvrant est empilé ; un symbole fermant doit correspondre au sommet de la pile, que l'on dépile. À la fin, la pile doit être vide.
import java.util.ArrayDeque;
import java.util.Deque;
public class Exo5Parentheses {
static boolean bienParenthesee(String s) {
Deque<Character> pile = new ArrayDeque<>();
for (char c : s.toCharArray()) {
if (c == '(' || c == '[' || c == '{') {
pile.push(c);
} else if (c == ')' || c == ']' || c == '}') {
if (pile.isEmpty()) return false; // fermante sans ouvrante
char o = pile.pop();
if ((c == ')' && o != '(') || (c == ']' && o != '[') || (c == '}' && o != '{'))
return false; // mauvaise paire
}
}
return pile.isEmpty(); // ouvrantes non refermées ?
}
public static void main(String[] args) {
String[] tests = {"(a+b)*[c-d]", "{[()()]}", "(]", "((x)", "a)(b", ""};
for (String t : tests) {
System.out.println("\"" + t + "\" : " + bienParenthesee(t));
}
}
}
"(a+b)*[c-d]" : true
"{[()()]}" : true
"(]" : false
"((x)" : false
"a)(b" : false
"" : true
Les trois échecs correspondent aux trois façons de mal parenthéser : une fermante qui ne correspond pas au sommet ((]), une ouvrante jamais refermée (((x) : la pile n'est pas vide à la fin), une fermante sans ouvrante (a)(b : la pile est vide quand arrive )). La pile est indispensable : c'est toujours la dernière ouverture non refermée qui doit être fermée la première.
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.