Dizesindeki karakterlerin her çifti Swap

5 Cevap php

Ben bir dize takas karakter çiftlerinin tüm permütasyon almak istiyorum. Örneğin:

Baz dize: abcd

Kombinasyonları:

  1. bacd
  2. acbd
  3. abdc

vb

Edit

Ben birbirimize yanında sadece harflerini takas etmek istiyorum. , Ikinci ile birinci, ikinci, üçüncü olan, ancak altıda üçüncü değil gibi.

Bunu yapmanın en iyi yolu nedir?

Edit

Sadece eğlenmek için: Üç veya dört çözümleri vardır, birisi bu yüzden en hızlı olduğu karşılaştırabilirsiniz olanların bir hız testi sonrası olabilir?

Speed test

Ben nickf koduna ve benim hız testi yapılmış ve sonuçlar mayın dört harf (0.08 ve 0.06 10K için zamanlarda) de nickf bulunuyor atıyor ama nickf (nick en 0,24 ve benim 0.37) 10 harf adresinden atıyor oluyor vardır

5 Cevap

Edit: Markdown bugün benden nefret ediyor ...

$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 i daha güzel geldi, teşekkür ederim güzel bir çözüm yaptı:

  $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);

Nasıl sadece aşağıdaki kullanma hakkında:

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";
}

İşte onun overusing değil substr () gibi biraz daha hızlı bir çözümdür.

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());