【问题标题】:Finding all combinations/permutations of letters in a string using Perl [duplicate]使用Perl查找字符串中字母的所有组合/排列[重复]
【发布时间】:2021-06-18 06:34:23
【问题描述】:

假设我有一个字符串abc。我想找到可以从该字符串中的字母创建的所有组合/排列。

例如:

abc
bac
acb
cba
...

如何用 Perl 做到这一点?

【问题讨论】:

    标签: perl permutation


    【解决方案1】:

    首先,根据您的示例,您正在尝试生成 permutations 而不是 combinations:元素的顺序对前者很重要,但对后者不重要。这意味着abccba 是相同的组合,但排列不同。

    至于怎么做,我建议把你的字符串转换成一个数组(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:它应该更快。我上面链接的问题的一些答案显示了如何使用这个模块。

    【讨论】:

      猜你喜欢
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2023-03-19
      • 2013-01-12
      • 2023-04-04
      • 1970-01-01
      • 2016-04-06
      相关资源
      最近更新 更多