Permutations de chaînes de caractères récursives en JavaScript

JavaScriptJavaScriptBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons explorer le concept de permutations de chaînes de caractères en JavaScript. Nous utiliserons la récursion pour générer toutes les permutations possibles d'une chaîne donnée, y compris les doublons. Nous discuterons également de l'utilisation des méthodes Array.prototype.map() et Array.prototype.reduce() pour simplifier le code et combiner les différentes permutations.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript/BasicConceptsGroup -.-> javascript/variables("Variables") javascript/BasicConceptsGroup -.-> javascript/data_types("Data Types") javascript/BasicConceptsGroup -.-> javascript/arith_ops("Arithmetic Operators") javascript/BasicConceptsGroup -.-> javascript/comp_ops("Comparison Operators") javascript/BasicConceptsGroup -.-> javascript/cond_stmts("Conditional Statements") javascript/BasicConceptsGroup -.-> javascript/array_methods("Array Methods") javascript/BasicConceptsGroup -.-> javascript/obj_manip("Object Manipulation") javascript/AdvancedConceptsGroup -.-> javascript/higher_funcs("Higher-Order Functions") subgraph Lab Skills javascript/variables -.-> lab-28626{{"Permutations de chaînes de caractères récursives en JavaScript"}} javascript/data_types -.-> lab-28626{{"Permutations de chaînes de caractères récursives en JavaScript"}} javascript/arith_ops -.-> lab-28626{{"Permutations de chaînes de caractères récursives en JavaScript"}} javascript/comp_ops -.-> lab-28626{{"Permutations de chaînes de caractères récursives en JavaScript"}} javascript/cond_stmts -.-> lab-28626{{"Permutations de chaînes de caractères récursives en JavaScript"}} javascript/array_methods -.-> lab-28626{{"Permutations de chaînes de caractères récursives en JavaScript"}} javascript/obj_manip -.-> lab-28626{{"Permutations de chaînes de caractères récursives en JavaScript"}} javascript/higher_funcs -.-> lab-28626{{"Permutations de chaînes de caractères récursives en JavaScript"}} end

Algorithme des permutations de chaînes de caractères

Pour générer toutes les permutations d'une chaîne de caractères qui contient des doublons, utilisez l'algorithme suivant :

  1. Ouvrez le Terminal/SSH et tapez node pour commencer à pratiquer la programmation.
  2. Utilisez la récursion pour créer toutes les permutations possibles de la chaîne donnée.
  3. Pour chaque lettre dans la chaîne donnée, créez toutes les permutations partielles pour le reste de ses lettres.
  4. Utilisez Array.prototype.map() pour combiner la lettre avec chaque permutation partielle.
  5. Utilisez Array.prototype.reduce() pour combiner toutes les permutations dans un tableau.
  6. Les cas de base sont pour String.prototype.length égal à 2 ou 1.
  7. ⚠️ AVERTISSEMENT : Le temps d'exécution augmente exponentiellement avec chaque caractère. Pour des chaînes de plus de 8 à 10 caractères, l'environnement peut se bloquer car il essaie de résoudre toutes les combinaisons différentes.

Voici le code JavaScript pour l'algorithme :

const stringPermutations = (str) => {
  if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str];
  return str
    .split("")
    .reduce(
      (acc, letter, i) =>
        acc.concat(
          stringPermutations(str.slice(0, i) + str.slice(i + 1)).map(
            (val) => letter + val
          )
        ),
      []
    );
};

Vous pouvez tester la fonction stringPermutations avec le code suivant :

stringPermutations("abc"); // ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']

Sommaire

Félicitations ! Vous avez terminé le laboratoire sur les permutations de chaînes de caractères. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.