繁体   English   中英

交换字符串中的每对字符

[英]Swap every pair of characters in string

我想获得字符串交换字符对的所有排列。 例如:

基本字符串: abcd

组合:

  1. bacd
  2. acbd
  3. abdc

等等

编辑

我想只交换彼此相邻的字母。 就像第一次用第二次,第二次用第三次,但不是第三次用第六次。

最好的方法是什么?

编辑

只是为了好玩:有三个或四个解决方案,有人会发布那些速度测试,以便我们可以比较哪个最快?

速度测试

我对nickf的代码和我的代码进行了速度测试,结果是我的四个字母(0.08和0.06为10K次)击败了nickf,但是nickf以10个字母击败它(缺口0.24和我的0.37)

编辑:Markdown今天讨厌我......

$input = "abcd";
$len = strlen($input);
$output = array();

for ($i = 0; $i < $len - 1; ++$i) {
    $output[] = substr($input, 0, $i)
              . substr($input, $i + 1, 1)
              . substr($input, $i, 1)
              . substr($input, $i + 2);
}
print_r($output);

nickf做了漂亮的解决方案谢谢你,我想出的不那么漂亮:

  $arr=array(0=>'a',1=>'b',2=>'c',3=>'d');
  for($i=0;$i<count($arr)-1;$i++){
  $swapped="";
  //Make normal before swapped
  for($z=0;$z<$i;$z++){
   $swapped.=$arr[$z];
  }
  //Create swapped
  $i1=$i+1;
  $swapped.=$arr[$i1].$arr[$i];

  //Make normal after swapped.     
  for($y=$z+2;$y<count($arr);$y++){
  $swapped.=$arr[$y];

  }
$arrayswapped[$i]=$swapped;
}
var_dump($arrayswapped);

如何使用以下内容:

function swap($s, $i)
{
  $t = $s[$i];
  $s[$i] = $s[$i+1];
  $s[$i+1] = $t;

  return $s;
}

$s = "abcd";
$l = strlen($s);
for ($i=0; $i<$l-1; ++$i)
{
  print swap($s,$i)."\n";
}

这是一个稍微快一点的解决方案,因为它没有过度使用substr()。

function swapcharpairs($input = "abcd") {
  $pre = "";
  $a="";
  $b = $input[0];
  $post = substr($input, 1);
  while($post!='') {
    $pre.=$a;
    $a=$b;
    $b=$post[0];
    $post=substr($post,1);
    $swaps[] = $pre.$b.$a.$post;
  };
  return $swaps;
}

print_R(swapcharpairs());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM