Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将一组字符作为单个单位计数的字符串排列_Php_Algorithm_Combinations_Permutation - Fatal编程技术网

Php 将一组字符作为单个单位计数的字符串排列

Php 将一组字符作为单个单位计数的字符串排列,php,algorithm,combinations,permutation,Php,Algorithm,Combinations,Permutation,我的问题可能听起来很愚蠢,但问题来了 我将用户的输入作为Karim@123. 我想让我的程序创建给定输入的排列,将Karim、@和123作为单个单独的单位。因此,输出将类似于karim123@、@karim123、@123karim,123@karim,123karim@. 记住会有三个!在这种特殊情况下的排列。我正在使用一个php函数,但该函数告诉我karim@123这不是我想要的。功能如下 function permute($str,$i,$n) { if ($i == $n)

我的问题可能听起来很愚蠢,但问题来了

我将用户的输入作为Karim@123. 我想让我的程序创建给定输入的排列,将Karim、@和123作为单个单独的单位。因此,输出将类似于karim123@、@karim123、@123karim,123@karim,123karim@. 记住会有三个!在这种特殊情况下的排列。我正在使用一个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:请在向下投票前指定原因。

假设您划分字符串的方式是将所有字母字符、所有特殊字符和所有数字包括在一起,您可以创建类似于上述示例的地图:

A => Karim
B => @
C => 123
然后创建ABC的所有排列,将是:

ABC, ACB, BAC, BCA, CAB, CBA

并替换为映射中的相应值。

为什么只对字符串进行3次分割,如Karim、@和123,为什么不进行4次、5次、2次或k次分割?这样可以将字符串分组,将所有字母字符、所有特殊字符和所有数字都包括在一起?完全正确。此外,输入字符串的模式如下所示。单词+特殊字符+数字。我已经写了答案。在某种程度上,这是一种琐碎的方法?你还有其他疑问/问题吗?请尽管问,我会尽力帮助你。