2017-09-06 38 views
-4

有兩個字符串,每一個組合我想生成與第二第一個字的每個組合。我想插入第二個單詞到第一個單詞以生成每個可能的組合。唯一的規則是:生成的兩個詞

落後對方

沒有插入單詞,在這個例子:

string input = "Hello"; 
string secondInput = "."; 

這種方法: GenerateAllCombinations(input,secondInput);將返回:

//1 dot 
.Hello 
H.ello 
He.llo 
Hel.lo 
Hell.o 
Hello. 

//2 dot 
.H.ello 
.He.llo 
.Hel.lo 
.Hel.lo 
.Hell.o 
.Hello. 
.He.llo 
.Hel.lo 
.Hell.o 
.Hello. 
.Hel.lo 
.Hell.o 
.Hello. 
H.e.llo 
H.el.lo 
H.ell.o 
H.ello. 
Hel.l.o 
Hel.lo. 
Hell.o. 

//3 dots 
.H.e.llo 
.H.el.lo 
.H.ell.o 
.H.ello. 
.He.l.lo 
.He.ll.o 
.He.llo. 
.Hel.l.o 
.Hel.lo. 
.Hell.o. 

//4 dots 
.H.e.l.lo 
.H.e.ll.o 
.H.e.llo. 
.He.l.l.o 
.He.l.lo. 
.Hel.l.o. 

//5 dots 
.H.e.l.l.o 
.H.e.l.lo. 
.He.l.l.o. 

由於規則說我不想要這樣的事情: Hell.o....

這防止產生無限組合。

這樣看來,最好的辦法是使用遞歸。我已經添加了一個正在做我想要的代碼,但它沒有使用遞歸。主要問題是我無法使用我的代碼與每個輸入。它只適用於一種大小的單詞。你有什麼想法如何解決這個問題?

+2

你嘗試過這麼遠嗎? –

+0

遞歸方法調用它自己,所以你的方法需要一個計數器作爲第一個字符串的每一列的參數。 – louis12356

+4

請在嘗試尋求幫助之前嘗試並發現問題。 – RH6

回答

1

M=Len(Input)+1佔位符。
還有2^M變體放置(或省略)個點(包括但點源字符串)。
所以使從0循環來2^M-1和在循環計數器的二進制表示插入的一個位點的位置

實施例:
爲「你好」輸入計數器從0到63。
計數器21dec=010101bin對應以「.He.ll.o」