2011-10-23 115 views
1

我正在創建一個函數,它將使用字符集返回給定字符串長度內的每個可能的字符串。基於字符集的固定長度的所有字符串組合

作爲一個例子, 「ABC」,和2的長度的字符集應允許9(3^2)獨特組合:

AA, AB, AC, BA, BB, BC, CA,CB , 立方厘米

(列表構造手動地)

什麼方法可被用於創建這樣的功能?

+0

這是功課還是面試問題?如果是,請相應標記。我們很樂意提供幫助,但請幫助我們理解您爲什麼問。謝謝。 –

+0

@bryc可以跳過像ac和ca這樣的組合嗎?那是唯一的組合? – Mob

+0

@hakre它不是排列的提問者尋求 – AakashM

回答

3

像往常一樣,有多種方法來解決你問什麼,這只是一種方式,每個字符使用一個計數器輸出字符串:

$c = "abc"; // charset 
$l = 2; // string length 

for($t='',$cl=strlen($c),$s=array_fill(0,$l,0),$i=pow($cl,$l);$a=0,$i--;) { 
    for($t&&$t.=', ';$a<$l;$t.=$c[$s[$a++]]); 
    for(;$a--&&++$s[$a]==$cl;$s[$a]=0); 
}; 

echo $t; // the string you asked for. 

AA,AB,AC,BA,BB ,bc,ca,cb,cc

一個主循環,一個循環用於構建字符串和一個循環用於向上計數。

我可以想象這應該與得到輸出字符串的每個位置的模數。

+0

你好,我upvoted你的答案,因爲它是短暫的,非常適合我的需求。然而,它很短,我無法改變它,所以我把它變成一個函數,然後它返回一個字符串,而不是一次性的所有可能性。你可以幫我嗎?或指導我,所以我可以做到這一點?謝謝 – user3916429

2

你已經去了解這一點,我們可以清楚地從你的榜樣的解決方案,請參閱:

AA,AB,AC,BA,BB,BC,CA,CB,CC

你在想什麼來提出這個解決方案?你必須保持幾件事情:

  1. 有什麼字符我應該從字符集開始?

  2. 因爲我正在構造輸出字符串,請問下一個 charset中的字符?

  3. 我可以從字符集中挑出多少個字符?

  4. 當我從字符集中挑選出所有允許的字符時,我該做什麼?

  5. 我已經用盡了charset方面的字符嗎?如果是,我完成了。

你可以把它轉換成代碼嗎?或者這個答案太可愛了?

+0

我想你是對的,但是當我將它翻譯成代碼時我感到茫然 - 即如何設置循環,遍歷字符集等。 – bryc

+0

@bryc:我添加了一些代碼,請參閱[我的答案](http://stackoverflow.com/questions/7863781/all-string-combinations-in-a-fixed-length-based-on-a-charset/7891640 #7891640)。 – hakre

相關問題