Permutaciones de cadenas recursivas en JavaScript

JavaScriptJavaScriptBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, exploraremos el concepto de permutaciones de cadenas en JavaScript. Utilizaremos la recursión para generar todas las permutaciones posibles de una cadena dada, incluyendo duplicados. También discutiremos el uso de los métodos Array.prototype.map() y Array.prototype.reduce() para simplificar el código y combinar las diferentes permutaciones.


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{{"Permutaciones de cadenas recursivas en JavaScript"}} javascript/data_types -.-> lab-28626{{"Permutaciones de cadenas recursivas en JavaScript"}} javascript/arith_ops -.-> lab-28626{{"Permutaciones de cadenas recursivas en JavaScript"}} javascript/comp_ops -.-> lab-28626{{"Permutaciones de cadenas recursivas en JavaScript"}} javascript/cond_stmts -.-> lab-28626{{"Permutaciones de cadenas recursivas en JavaScript"}} javascript/array_methods -.-> lab-28626{{"Permutaciones de cadenas recursivas en JavaScript"}} javascript/obj_manip -.-> lab-28626{{"Permutaciones de cadenas recursivas en JavaScript"}} javascript/higher_funcs -.-> lab-28626{{"Permutaciones de cadenas recursivas en JavaScript"}} end

Algoritmo de permutaciones de cadenas

Para generar todas las permutaciones de una cadena que contiene duplicados, utiliza el siguiente algoritmo:

  1. Abre la Terminal/SSH y escribe node para comenzar a practicar la codificación.
  2. Utiliza la recursión para crear todas las permutaciones posibles de la cadena dada.
  3. Para cada letra en la cadena dada, crea todas las permutaciones parciales para el resto de sus letras.
  4. Utiliza Array.prototype.map() para combinar la letra con cada permutación parcial.
  5. Utiliza Array.prototype.reduce() para combinar todas las permutaciones en una matriz.
  6. Los casos base son para String.prototype.length igual a 2 o 1.
  7. ⚠️ ADVERTENCIA: El tiempo de ejecución aumenta exponencialmente con cada carácter. Para cadenas con más de 8 a 10 caracteres, el entorno puede colgar mientras intenta resolver todas las combinaciones diferentes.

Aquí está el código JavaScript para el algoritmo:

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
          )
        ),
      []
    );
};

Puedes probar la función stringPermutations con el siguiente código:

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

Resumen

¡Felicitaciones! Has completado el laboratorio de Permutaciones de Cadenas. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.