【问题标题】:Permutations of string counting a group of characters as a single unit将一组字符作为一个单元计数的字符串排列
【发布时间】:2017-04-17 11:36:37
【问题描述】:

我的问题可能听起来很菜鸟,但它就在这里。

我将用户输入为“Karim@123”。我希望我的程序创建将“Karim”、“@”和“123”视为单个单独单元的给定输入的排列。因此输出将类似于“karim123@”、“@karim123”、“@123karim” “123@卡里姆”,“123卡里姆@”。记住会有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:请在投票前说明原因。

【问题讨论】:

  • 为什么你只对字符串进行 3 次分割,例如 Karim@123,为什么不进行 4 或 5 或 2 或 k 分割?
  • 您是否将字符串分组,包括所有字母字符、所有特殊字符和所有数字?
  • 没错。此外,输入字符串的模式将是这样的。 “单词”+“特殊字符”+“数字”。
  • 我已经写了一个答案。这是一种微不足道的方法。

标签: php algorithm combinations permutation


【解决方案1】:

假设您划分字符串的方式是将所有字母字符、所有特殊字符和所有数字放在一起,您可以为上面的示例创建这样的映射:

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

然后创建“ABC”的所有排列,这将是:

ABC, ACB, BAC, BCA, CAB, CBA

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

【讨论】:

  • “在某种程度上”?您还有其他疑问/问题吗?随时问,我会尽我所能提供帮助。
猜你喜欢
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
相关资源
最近更新 更多