Алгоритм перестановок строк
Для генерации всех перестановок строки, которая содержит дубликаты, используйте следующий алгоритм:
- Откройте Терминал/SSH и введите
node
, чтобы начать практиковать программирование.
- Используйте рекурсию для создания всех возможных перестановок заданной строки.
- Для каждой буквы в заданной строке создайте все частичные перестановки для остальных ее букв.
- Используйте
Array.prototype.map()
, чтобы объединить букву с каждой частичной перестановкой.
- Используйте
Array.prototype.reduce()
, чтобы объединить все перестановки в один массив.
- Базовыми случаями являются
String.prototype.length
, равные 2
или 1
.
- ⚠️ ВНИМАНИЕ: Время выполнения увеличивается экспоненциально с каждым символом. Для строк длиной более 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']