我的问题可能听起来像菜鸟,但现在好了。
我从用户那里收到“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之前指明原因。
答案 0 :(得分:1)
假设你划分字符串的方式是你将所有字母字符包括在一起,所有特殊字符和所有数字在一起,你可以为上面的例子创建一个这样的地图:
A => Karim
B => @
C => 123
然后创建&#34; ABC&#34;的所有排列,这将是:
ABC, ACB, BAC, BCA, CAB, CBA
并替换为地图中的相应值。