2011-07-23 99 views

回答

4

你需要產生的所有字符串的排列,方法是通過迭代呼應了所有獨特的洗牌機會可能性,或使用下面的這種遞歸方法。請注意,對於中等大小的陣列,這個速度將會非常快速地增長。對於具有獨特字符的單詞,可能的排列數是n!其中n是長度。對於六個字母的單詞,該數組將有720個條目!這種方法不是最有效的,但取決於你想要做什麼,它應該工作正常。

(來源:http://cogo.wordpress.com/2008/01/08/string-permutation-in-php/

function permute($str) { 
    /* If we only have a single character, return it */ 
    if (strlen($str) < 2) { 
     return array($str); 
    } 

    /* Initialize the return value */ 
    $permutations = array(); 

    /* Copy the string except for the first character */ 
    $tail = substr($str, 1); 

    /* Loop through the permutations of the substring created above */ 
    foreach (permute($tail) as $permutation) { 
     /* Get the length of the current permutation */ 
     $length = strlen($permutation); 

     /* Loop through the permutation and insert the first character of the original 
     string between the two parts and store it in the result array */ 
     for ($i = 0; $i <= $length; $i++) { 
      $permutations[] = substr($permutation, 0, $i) . $str[0] . substr($permutation, $i); 
     } 
    } 

    /* Return the result */ 
    return $permutations; 
} 

注意,這個有點幼稚的做法將不能正確處理重複字母(例如, '種子',有兩個e`s)。如上面源中所示,如果單詞包含多個相同字母,則可以使用以下代碼來消除重複項:

$permutations = array_unique(permute($str)); 
相關問題