2011-09-06 57 views
0

可能重复:
Generate all unique substrings for given string帮助制作算法

谁能告诉我如何解决这个问题的一些轻?

我有喜欢 一些值的字符串“{1,2,3}”用逗号分隔每个数字 现在与字符串我需要生成一个新的字符串...新的字符串应该像 “{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}”

做你的头,但我不知道如何使它与算法工作 任何人都可以解释我应该做什么?

我不想要代码,只是请解释一下如何去做。 我在想递归...但我不能想办法

+2

我认为你需要解释你试图产生什么样的模式?看起来像输入 –

+1

的所有唯一排序的子字符串应{2,3}在新字符串中?这基本上是从一个集合中产生所有的子集? PS。这是作业吗? –

+0

您是否正在寻找输出列表中项目的每个排列的逻辑,同时保留项目的顺序?如果是这样,你是否意外省略{2,3}? – nycdan

回答

2

首先,你需要迭代整数0到N,其中N是你的字符串中的值的数量(我们称之为迭代变量i)。对于每个i,您将在输入中生成所有包含i的数字,其中包含N数字。

例如,i == 0将生成{}i == 1将生成{1},{2},{3}

现在,让我们假设的i值是固定的;这将让我们继续理解为这些迭代中的每一个做什么。很明显,我们需要某种嵌套循环,因为我们将为每个值i生成多个(在一般情况下)输出值(例如,如前所示,我们将在i == 1时生成3个集合)。

这叫做生成组合i项目出N,并有大量的文件可用。例如,请参阅Algorithm to return all combinations of k elements from n

0

对于另一种方法,将问题视为二进制问题。你的设置有三个元素,所以你需要三个二进制数字。该集合中的每个成员可以在结果中出现(1)或不存在(0)。因此可以将所需的结果映射到3位二进制数:

000 -> {} 
001 -> {3} 
010 -> {2} 
011 -> {2, 3} 
100 -> {1} 
101 -> {1, 3} 
110 -> {1, 2} 
111 -> {1, 2, 3} 

不难从0(000)至7(111)产生的数量和从中提取所需要的组合。