2017-09-06 41 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”