2017-03-02 57 views
-1

這裏,有一個示例字符串「XjYAKpR」..如何創建所有新字符串的可能性與該字符串?PHP - 如何創建一個字符串的所有可能性

我已經試過之前

function containAllRots($s, $arr) { 
$n = strlen($s); 
$a = array(); 
for ($i = 0; $i < $n ; $i++) { 
    $rotated = rotate(str_split($s), $i); 
    $a[] = $rotated;   
} 
print_r($a);die(); 
if (array_diff($arr, $a)) { 
    return True; 
} 
else 
{ 
    return False; 
} 
} 

我做2個功能旋轉併產生

function rotate($l, $n) { 
    $b = $l[$n]; 
    $sisa = array_values(array_diff($l, array($b))); 
    for ($i = 0; $i < count($sisa) ; $i++) { 
     $random[] = generate($sisa, $b); 
    }  
    print_r($random);die(); 
    $hasil = $l[$n] . implode("",$random); 
    return $hasil; 
} 

function generate($sisa, $b) { 
    $string = implode("",$sisa); 
    $length = count($sisa);  
    $size = strlen($string); 
    $str = ''; 
    for($i = 0; $i < $length; $i++) { 
     $str .= $string[ rand(0, $size - 1) ]; 
    } 
+0

您向我們展示的代碼不會生成字符串的所有_permutations_,請檢查數組是否包含給定字符串的所有排列。 排列必須按目標數組中的精確順序排列,否則測試將失敗。 作爲第一個選項,我會在對它們進行區分之前對這些數組進行排序。 – Eineki

回答

1

在這裏有一對函數,可以讓你計算置換設置 (不重複是考慮到)

function extends_permutation($char, $perm) { 
    $result = []; 
    $times = count($perm); 
    for ($i=0; $i<$times; $i++) { 
     $temp = $perm; 
     array_splice($temp, $i, 0, $char); 
     array_push($result, $temp); 

    } 
    array_push($result, array_merge($perm, [$char])); 
    return $result; 
} 

function extends_set_of_permutations($char, $set) { 
    $step = []; 
    foreach ($set as $perm) { 
     $step = array_merge($step, extends_permutation($char, $perm)); 
    } 
    return $step; 
} 

您可以使用它們生成所需的一組置換。事情是這樣的:

$seed = "XjYAKpR"; 
// the first set of permutations contains only the 
// possible permutation of a one char string (1) 
$result_set = [[$seed[0]]]; 

$rest = str_split(substr($seed,1)); 

foreach($rest as $char) { 
    $result_set = extends_set_of_permutations($char, $result_set); 
} 

$result_set = array_map('implode', $result_set); 
sort($result_set); 

在執行結束時,你將有你的result_set陣列(按字母順序排序)在字符串中產生的5040個排列。

添加一個字符,你將有超過40000個結果。

這些功能在實現和命名上相當幼稚,兩方面都可以改進。

+0

非常感謝! – Dimas

相關問題