Recherche…


Introduction

Deux chaînes avec le même jeu de caractères sont appelées anagrammes. J'ai utilisé javascript ici.

Nous allons créer un hachage de str1 et augmenter le nombre +1. Nous allons boucler la 2ème chaîne et vérifier que tous les caractères sont présents dans le hachage et diminuer la valeur de la clé de hachage. Vérifiez que toutes les valeurs de la clé de hachage sont nulles sera anagramme.

Exemple d'entrée et de sortie

Ex1: -

let str1 = 'stackoverflow';
let str2 = 'flowerovstack';

Ces chaînes sont des anagrammes.

// Crée un hachage à partir de str1 et augmente un compte.

hashMap = {
    s : 1,
    t : 1,
    a : 1,
    c : 1,
    k : 1,
    o : 2,
    v : 1,
    e : 1,
    r : 1,
    f : 1,
    l : 1,
    w : 1
}

Vous pouvez voir que hashKey 'o' contient la valeur 2 car o est 2 fois dans la chaîne.

Maintenant, bouclez sur str2 et vérifiez que chaque caractère est présent dans hashMap, si oui, diminuez la valeur de la clé hashMap, sinon retournez false (qui indique qu'il ne s'agit pas d'une anagramme).

hashMap = {
    s : 0,
    t : 0,
    a : 0,
    c : 0,
    k : 0,
    o : 0,
    v : 0,
    e : 0,
    r : 0,
    f : 0,
    l : 0,
    w : 0
}

Maintenant, bouclez l'objet hashMap et vérifiez que toutes les valeurs sont nulles dans la clé de hashMap.

Dans notre cas, toutes les valeurs sont nulles, donc c'est une anagramme.

Code générique pour les anagrammes

(function(){

    var hashMap = {};
    
    function isAnagram (str1, str2) {
    
        if(str1.length !== str2.length){
            return false;
        }
        
        // Create hash map of str1 character and increase value one (+1).
        createStr1HashMap(str1);

        // Check str2 character are key in hash map and decrease value by one(-1);
        var valueExist = createStr2HashMap(str2);

        // Check all value of hashMap keys are zero, so it will be anagram.
        return isStringsAnagram(valueExist);
    }
    
    function createStr1HashMap (str1) {
        [].map.call(str1, function(value, index, array){
            hashMap[value] = value in hashMap ?  (hashMap[value] + 1) : 1;
            return value;
        });
    }
    
    function createStr2HashMap (str2) {
        var valueExist = [].every.call(str2, function(value, index, array){
            if(value in hashMap) {
                hashMap[value] = hashMap[value] - 1;
            }
            return value in hashMap;
        });
        return valueExist;
    }
    
    function isStringsAnagram (valueExist) {
        if(!valueExist) {
            return valueExist;
        } else {
            var isAnagram;
            for(var i in hashMap) {
                if(hashMap[i] !== 0) {
                    isAnagram = false;
                    break;
                } else {
                    isAnagram = true;
                }
            }
    
            return isAnagram;
        }
    }
    
    isAnagram('stackoverflow', 'flowerovstack'); // true
    isAnagram('stackoverflow', 'flowervvstack'); // false
    
})();

Complexité temporelle: - 3n soit O (n).



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow