2012-06-17 19 views
0

我有這樣的代碼來生成一個字符串在PHP中如何生成一個字符串的所有可能的模式?

<?PHP  
    for($i=0;$i< 16;$i++){ 

    echo decbin($i)."<br>"; 
    } 
    ?> 

的所有posibilites這將打印

0 

1 

10 

11 

100 

101 

110 

111 

1000 

1001 

1010 

我要的是通過更換所有的人用4個字母串結合這個二進制數據「*」 所以當你輸入字符串「幫助」你會得到

help 

hel* 

he*p 

he** 

等等

我在努力 任何想法將不勝感激?

由於

+3

您解決這些類型的用鉛筆和一張紙最好的問題。 – hakre

回答

1

警告:100%未測試

$s='help'; 
$l = strlen($s)-1; 
for($i=0;$i<=$len;$i++){ 
    $bin=decbin($i); 
    $newS = $s; 
    foreach(str_split($bin) as $k=>$v) { 
    if ($v) { 
    $index = $l - $k; 
    $newS[$index] = '*'; 
    } 
    } 

    echo $newS.'<br>'; 
} 
0

一個簡單的方法是:

  1. 墊bincode所以0 => 0000

  2. 環bincode,和如果bincode [n] = 0,用*替換word [n]。

1

你可以爲這個問題寫一個簡單的遞歸算法。

該算法的思想是,你可以看看二進制數,並看到0意味着字符將保持不變,並且1意味着它將變成星號。你爲每個字符做了這個,因爲你有一個4個字符的長字,你得到了2*2*2*2 = 16排列。

該算法檢查單詞中的字符,併爲每個字符嘗試生成它作爲普通字符和星號的排列。結果是當每個字符是自己的或者用星號標記時,所有help這個詞的排列。

function asterisk_permutations($str, &$result=array(), $i=0) { 
    if ($i >= strlen($str)) { 
     $result[] = $str; 
     return; 
    } 

    asterisk_permutations($str, $result, $i+1); 
    asterisk_permutations(substr_replace($str, '*', $i, 1), $result, $i+1); 
} 

asterisk_permutations("help", $result); 
var_dump($result); 

,輸出是:

array(16) { 
    [0]=> string(4) "help" 
    [1]=> string(4) "hel*" 
    [2]=> string(4) "he*p" 
    [3]=> string(4) "he**" 
    [4]=> string(4) "h*lp" 
    [5]=> string(4) "h*l*" 
    [6]=> string(4) "h**p" 
    [7]=> string(4) "h***" 
    [8]=> string(4) "*elp" 
    [9]=> string(4) "*el*" 
    [10]=> string(4) "*e*p" 
    [11]=> string(4) "*e**" 
    [12]=> string(4) "**lp" 
    [13]=> string(4) "**l*" 
    [14]=> string(4) "***p" 
    [15]=> string(4) "****" 
} 
+0

我不明白。爲什麼有人會在沒有解釋的情況下冷靜下來? –

+1

我沒有downvote,但它可能是你的代碼將導致更長的字符串stackoverflow,並且網站的名稱是stackoverflow。 –

+0

@ Tiberiu-IonuţStan:那麼你可以說任何PHP腳本... –

相關問題