Je dois écrire une fonction qui prend deux chaînes et les compare, puis renvoie le nombre de lettres dans les chaînes qui sont différentes. Par exemple, "ABC" et "DEC" doivent renvoyer 4. Ma fonction est toujours courte en raison de la façon dont je les compare. J'ai regardé mais je n'arrive pas à trouver de solution.

J'ai essayé de parcourir la chaîne sans la diviser et je me suis retrouvé avec le même problème.

function makeAnagram(a, b) {
    let result = 0;

    let a1 = a.split("").sort();
    let b1 = b.split("").sort();
    for(let i = 0; i < b1.length; i++){
        if(a1.indexOf(b1[i] < 0)){
            result += 1;
        }
    }


    return result;
 }
2
TEbogo 6 nov. 2019 à 12:21

4 réponses

Meilleure réponse

En une seule ligne:

("ABC"+"DEC").split('').sort().join('').replace(/(.)\1+/g, "").length

Retour

4

Etapes du programme:

  1. ("ABC"+"DEC") crée une chaîne avec les 2 mots fusionnés: ABCDEC

  2. ("ABC"+"DEC").split('').sort().join('') rend les caractères triés dans la chaîne: ABCCDE. Cela nous permettra de trouver facilement des doublons avec regex

  3. replace(/(.)\1+/g, "") supprime toutes les séquences de 2+ caractères, puis nous obtenons ABDE

  4. .length compte les caractères restants, qui sont ceux à occurrence unique.

3
Vincent 6 nov. 2019 à 09:48

Voilà ce que je ferais

La mise en oeuvre

let makeAnagram = (a,b) => {
  let clubStr = ('' + a).concat(b);
  let sortedStr = clubStr.trim().split('').sort().join('');
  let uncommonStr = sortedStr.replace(/(\w)\1+/gi, '');
  return uncommonStr.length;
};

Vous pouvez faire la même chose dans une seule ligne .

Appelant: makeAnagram('ABC', 'DCE')

Sortie: 4

1
Sumit Ramteke 6 nov. 2019 à 12:08

Une façon ES6 de faire de même

const makeAnagram = (a, b) => new Set(a + b).size - new Set([...a].filter(x => b.includes(x))).size;
console.log(makeAnagram('ABC', 'DEC')); // prints 4
2
Abito Prakash 6 nov. 2019 à 10:00

Tu peux faire:

Modifié comme suggestion de @freefaller

const makeAnagram = (a, b) => {
  const arr1 = a.split('')
  const arr2 = b.split('')
  const diff1 = arr1.filter(letter => !arr2.includes(letter))
  const diff2 = arr2.filter(letter => !arr1.includes(letter))
  
  return diff1.length + diff2.length
}

console.log(makeAnagram('ABC', 'DEC'))
3
Yosvel Quintero 6 nov. 2019 à 09:53