Рекурсивные перестановки строк в JavaScript

JavaScriptJavaScriptBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабе мы будем изучать концепцию перестановок строк в JavaScript. Мы будем использовать рекурсию для генерации всех возможных перестановок заданной строки, включая дубликаты. Также мы обсудим использование методов Array.prototype.map() и Array.prototype.reduce() для упрощения кода и объединения различных перестановок.


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{{"Рекурсивные перестановки строк в JavaScript"}} javascript/data_types -.-> lab-28626{{"Рекурсивные перестановки строк в JavaScript"}} javascript/arith_ops -.-> lab-28626{{"Рекурсивные перестановки строк в JavaScript"}} javascript/comp_ops -.-> lab-28626{{"Рекурсивные перестановки строк в JavaScript"}} javascript/cond_stmts -.-> lab-28626{{"Рекурсивные перестановки строк в JavaScript"}} javascript/array_methods -.-> lab-28626{{"Рекурсивные перестановки строк в JavaScript"}} javascript/obj_manip -.-> lab-28626{{"Рекурсивные перестановки строк в JavaScript"}} javascript/higher_funcs -.-> lab-28626{{"Рекурсивные перестановки строк в JavaScript"}} end

Алгоритм перестановок строк

Для генерации всех перестановок строки, которая содержит дубликаты, используйте следующий алгоритм:

  1. Откройте Терминал/SSH и введите node, чтобы начать практиковать программирование.
  2. Используйте рекурсию для создания всех возможных перестановок заданной строки.
  3. Для каждой буквы в заданной строке создайте все частичные перестановки для остальных ее букв.
  4. Используйте Array.prototype.map(), чтобы объединить букву с каждой частичной перестановкой.
  5. Используйте Array.prototype.reduce(), чтобы объединить все перестановки в один массив.
  6. Базовыми случаями являются String.prototype.length, равные 2 или 1.
  7. ⚠️ ВНИМАНИЕ: Время выполнения увеличивается экспоненциально с каждым символом. Для строк длиной более 8 - 10 символов среда может зависнуть, пытаясь решить все разные комбинации.

Вот JavaScript-код для алгоритма:

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

Вы можете протестировать функцию stringPermutations с помощью следующего кода:

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

Резюме

Поздравляем! Вы завершили лабу по перестановкам строк. Вы можете практиковать в других лабах в LabEx, чтобы улучшить свои навыки.