0

「ちょっとそこ」と言ってから、この文字列のすべてのプレフィックスの配列を作成する関数を作成しようとしています。したがって、「h」、「he」、「hey」、「hey」、「hey t」などを返します。

次に、同じ関数ですべてのサフィックスの 2 番目の配列を作成します (文字列を逆方向にカウントします)。同じ文字列の場合、「e」、「er」、「ere」、「ereh」、「ereht」、「ereht」などを返します。

私はこれを理解するために少し苦労していますが、文字列の可能なすべての組み合わせを取得する次のものを取得することができました。順番にのみ実行する必要があります。

$str    = "hey there";

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

permute($str,0,strlen($str)); // call the function.

}

どんな助けでも大歓迎です。

4

3 に答える 3

2

これはあなたがやろうとしていることですか?

<?php
    function getPrefixSuffix($string, &$prefixes = array(), &$suffixes = array()) {
        $stringLength = strlen($string);
        for ($i = 1; $i < $stringLength; $i++) {
            $prefixes[] = substr($string, 0, $i);
        }
        for ($i = $stringLength - 1; $i >= 1; $i--) {
            $suffixes[] = strrev(substr($string, $i));
        }
    }

    getPrefixSuffix("hey there", $prefixes, $suffixes);

    print_r($prefixes);
    /*
        Array
        (
            [0] => h
            [1] => he
            [2] => hey
            [3] => hey 
            [4] => hey t
            [5] => hey th
            [6] => hey the
            [7] => hey ther
        )
    */

    print_r($suffixes);
    /*
        Array
        (
            [0] => e
            [1] => er
            [2] => ere
            [3] => ereh
            [4] => ereht
            [5] => ereht 
            [6] => ereht y
            [7] => ereht ye
        )
    */
?>

デモ

于 2013-10-02T11:58:29.547 に答える
0

これはうまくいくはずです。3つの関数を書きました。最初のものは、すべての追加で印刷することにより、すべてのプレフィックスを取得します。3 つ目は、あなたが書いた swap メソッドです。2 つ目は単純に文字列を逆方向にスワップしてから、getPrefix を呼び出します。元の弦はそのままにしておきますのでご了承ください。

$str = "hey there"

function getPrefix($str)
{
    $printString = "";
    for ($i = 0; $i < strlen($str); $i++)
    {
        $printString .= $str[$i];
        print ($printString);
    }
}

function getBackwards($str)
{
    if (strlen($str) % 2 == 0)
    {
        for ($i = 0; $i < strlen($str)/2; $i++)
            swap ($str, $i, strlen($str)-1-$i);
    }
    else
    {
        for ($i = 0; $i < (strlen($str)-1)/2; $i++)
            swap ($str, $i, strlen($str)-1-$i);
    }
    getPrefix($str);
}

function swap(&$str,$i,$j)
{
    $temp = $str[$i];
    $str[$i] = $str[$j];
    $str[$j] = $temp;
}
于 2013-10-02T12:21:43.580 に答える
0

単純な for ループといくつかの substr が同じことをするでしょうか?

$prefixes = array();
$suffixes = array();
$str = "hey there";
$l = strlen($str);
for($i=1; $i<$l; $i++) {
  $prefixes[] = substr($str, 0, $i);
  $suffixes[] = strrev(substr($str, $l-$i, $i));
}

デモ

于 2013-10-02T11:58:10.843 に答える