Skip to content

Instantly share code, notes, and snippets.

@JustDravee
Created October 14, 2019 16:19
Show Gist options
  • Save JustDravee/5d9b55c63ba448cc50f3091dd30a0d4c to your computer and use it in GitHub Desktop.
Save JustDravee/5d9b55c63ba448cc50f3091dd30a0d4c to your computer and use it in GitHub Desktop.
bool anagrammes(String s1, String s2) {
// Check null
if (["", null].contains(s1) || ["", null].contains(s2)) {
return false;
}
// On enlève les caractères non alpha
String s1Alpha = s1.replaceAll(RegExp(r"[^a-zA-Z]"), "");
String s2Alpha = s2.replaceAll(RegExp(r"[^a-zA-Z]"), "");
// Si les tailles sont différentes : il ne s'agit pas d'une anagramme
if (s1Alpha.length != s2Alpha.length) {
return false;
}
// Map pour compter (s1) et décompter (s2) les caractères
Map<String, int> charsMap = Map<String, int>();
// s1Alpha et s2Alphra sont de même taille
for (int i = 0; i < s1Alpha.length; i++) {
// toLowerCase pour ignorer la casse
String charS1 = s1Alpha[i].toLowerCase();
String charS2 = s2Alpha[i].toLowerCase();
// L'astuce
charsMap[charS1] = charsMap[charS1] == null ? 1 : charsMap[charS1] + 1;
charsMap[charS2] = charsMap[charS2] == null ? (-1) : charsMap[charS2] - 1;
}
// Map vide => pas de caractères ajouté. Pas de caractère, pas d'anagramme
if (charsMap.isEmpty) {
return false;
}
// Si tous les chars sont au compte de 0, alors nous avons une anagramme
return charsMap.values.every((int count) => count == 0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment