2011-09-06 58 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)產生的數量和從中提取所需要的組合。