Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'dart:collection';
- bool blocCodeValide(String s) {
- // Null et empty check. Un bloc de taille < 2 est invalide
- if (["", null].contains(s) || s.length < 2) {
- return false;
- }
- ;
- // Init
- Queue stack = Queue();
- Map<String, String> pairesBlocs = {"{": "}", "(": ")", "[": "]"};
- bool bStackTouchee = false;
- // Logique
- for (int i = 0; i < s.length; i++) {
- String char = s[i];
- // Si le caractère est valide, je l'ajoute à la stack et passe à l'itération suivante
- if (pairesBlocs[char] != null) {
- stack.addLast(char);
- bStackTouchee = true;
- continue;
- }
- // Cas de caractère n'étant pas une ouverture de bloc de code
- // Test si le char en cours n'est pas la fermeture du dernier char de la stack
- if (stack.isNotEmpty && pairesBlocs[stack.removeLast()] != char) {
- return false;
- }
- }
- // S’il y a eu des opérations d’ajouts et de suppression sur la stack
- // et qu’elle se retrouve vide à la fin,il y a correspondance parfaite
- // entre les ouvertures et fermetures de blocs
- return bStackTouchee && stack.isEmpty;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement