楼主 这个问题其实不难,首先肯定的是“点”是存在于两个字母之间的 ,那么你就想象有n个“位置”在n+1个字母之间,每一个“位置”有两个状态,一个是存在“点”,一个是不存在“点”,都不存在的情况被排除掉了,所以本题的核心是求集合的非空子集。所有的可能性的个数为 2^n - 1
假设 字符串为qwer,那么有三个“位置”,我们把这个三个“位置”分别命名为a,b,c
那个通过循环和二进制位的判断可以得出所有的结果
楼主静下心来看看下面的结果,悟一下,算法的复杂度还是蛮低的
index从 1 到 2^n-1 (<=) 循环,每一步判断当前index中二进制位为1对应的位,然后将"点"放到相应的位置,下面的例子当到2^3-1也就是7的时候,三个“位置”上都放上了“点”
c   b   a   
0   0   1      qwe.r 
0   1   0      qw.er
0   1   1      qw.e.r
1   0   0      q.wer
1   0   1      q.we.r
1   1   0      q.w.er
1   1   1      q.w.e.r
我自己之前写过一个SKU相关的算法,其实本质和这个问题是一样的,可以参见 http://geeklu.com/2012/09/sku/