【发布时间】:2021-06-18 06:34:23
【问题描述】:
假设我有一个字符串abc。我想找到可以从该字符串中的字母创建的所有组合/排列。
例如:
abc
bac
acb
cba
...
如何用 Perl 做到这一点?
【问题讨论】:
标签: perl permutation
假设我有一个字符串abc。我想找到可以从该字符串中的字母创建的所有组合/排列。
例如:
abc
bac
acb
cba
...
如何用 Perl 做到这一点?
【问题讨论】:
标签: perl permutation
首先,根据您的示例,您正在尝试生成 permutations 而不是 combinations:元素的顺序对前者很重要,但对后者不重要。这意味着abc 和cba 是相同的组合,但排列不同。
至于怎么做,我建议把你的字符串转换成一个数组(split //, $str会做),然后生成这个数组的排列(见下文),然后到join排列得到回到字符串。至于如何计算排列,您可以使用一些现有的 cpan 模块来执行此操作:查看How can I generate all permutations of an array in Perl? 以获得灵感。例如,使用Algorithm::Combinatorics:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use Algorithm::Combinatorics qw(permutations);
my $string = "abc";
my @perms = map { join "", @$_ } permutations([split //, $string]);
say for @perms;
如果性能是一个问题,那么您可能应该改用Algorithm::Permute:它应该更快。我上面链接的问题的一些答案显示了如何使用这个模块。
【讨论】: