Skip to content

Instantly share code, notes, and snippets.

@JustDravee
Last active September 27, 2019 20:02
Show Gist options
  • Save JustDravee/fae840b6b794c99bb61d9bcbd9bb6f3a to your computer and use it in GitHub Desktop.
Save JustDravee/fae840b6b794c99bb61d9bcbd9bb6f3a to your computer and use it in GitHub Desktop.
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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment