Adloun

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

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 →