字符串的排列将一组字符计为单个单元

时间:2017-04-17 11:36:38

标签: php algorithm combinations permutation

我的问题可能听起来像菜鸟,但现在好了。

我从用户那里收到“Karim @ 123”的输入。我希望我的程序创建给定输入的排列,将“Karim”,“@”和“123”视为单个单独的单位。因此输出将类似于“karim123 @”,“@ karim123”,“@ 123karim” “123 @卡里姆”, “123karim @”。记得会有3个!在这种特殊情况下的排列。我正在使用php函数,但该函数告诉我“karim @ 123”的所有排列,这不是我想要的。功能如下。

function permute($str,$i,$n) {
   if ($i == $n)
       print "$str\n";
   else {
        for ($j = $i; $j < $n; $j++) {
          swap($str,$i,$j);
          permute($str, $i+1, $n);
          swap($str,$i,$j); // backtrack.
       }
   }
}

// function to swap the char at pos $i and $j of $str.
function swap(&$str,$i,$j) {
    $temp = $str[$i];
    $str[$i] = $str[$j];
    $str[$j] = $temp;
}   
$str = "hey";
permute($str,0,strlen($str));

PS:我是编程和算法的新手。

PPS:请在downvoting之前指明原因。

1 个答案:

答案 0 :(得分:1)

假设你划分字符串的方式是你将所有字母字符包括在一起,所有特殊字符和所有数字在一起,你可以为上面的例子创建一个这样的地图:

A => Karim
B => @
C => 123

然后创建&#34; ABC&#34;的所有排列,这将是:

ABC, ACB, BAC, BCA, CAB, CBA

并替换为地图中的相应值。