Comment pouvez vérifier l'anagramme de chaînes de caractères en C#

Donné deux chaînes A et B, de vérifier si elles sont des anagrammes.

Deux chaînes sont dit être des anagrammes, si une chaîne de caractères peut être obtenu par la réorganisation des lettres de l'autre.

Exemples d'anagrammes sont

  • dog, god
  • abac, baac
  • 123, 312

abab, aaba et dab, baad ne sont pas des anagrammes.

D'ENTRÉE :

Première ligne de l'entrée est le nombre de cas de test T.
Elle est suivie par T de lignes, chaque ligne a deux séparés par des espaces, les chaînes A et B;

SORTIE

Pour chaque cas de test, d'impression "OUI", si elles sont des anagrammes, sinon d'impression "NON". (sans les guillemets)

Contraintes

  1. 1 <= T <= 10
  2. A et B les deux contiennent uniquement en minuscule latine des lettres de 'a' à 'z' et
    chiffres de 0 à 9.
  3. Longueur de chaque chaîne A et B ne dépasse pas 5*10^5 (500000)

`

Sample Input            Sample Output
------------------------------------
3                           YES
abcd bcda                   NO
bad daa                     YES
a1b2c3 abc123               NO

Comment pouvons-nous faire cela ?

bool anagramChecker(string first, string second)
{
    if(first.Length != second.Length)
        return false;

    if(first == second)
        return true;//or false: Don't know whether a string counts as an anagram of itself

    Dictionary<char, int> pool = new Dictionary<char, int>();
    foreach(char element in first.ToCharArray()) //fill the dictionary with that available chars and count them up
    {
        if(pool.ContainsKey(element))
            pool[element]++;
        else
            pool.Add(element, 1);
    }
    foreach(char element in second.ToCharArray()) //take them out again
    {
        if(!pool.ContainsKey(element)) //if a char isn't there at all; we're out
            return false;
        if(--pool[element] == 0) //if a count is less than zero after decrement; we're out
            pool.Remove(element);
    }
    return pool.Count == 0;
}
si ce code ne fonctionne pas??
Voir Besoin d'aide en expansion sur une anagramme regex.
Tricheur méthode est de les trier et de comparer les séquences obtenues.
Voir Anagrammes à Rosettacode.org.
Honnêtement, je pense que votre solution est meilleure que celles proposées ci-dessous.

OriginalL'auteur smartechno | 2015-09-25