Created
October 14, 2019 16:19
-
-
Save JustDravee/5d9b55c63ba448cc50f3091dd30a0d4c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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