2012-06-22 85 views
0

假設我有一個ArrayList的字符串,如[a, b, c, d, ....]。任何人都可以幫助我一個示例代碼,我怎樣才能得出一個結果,其中包含所有可能的功率子集形成此列表,其中包括該列表中的特定字符串(單個和空子集除外)?如何爲列表元素中的項目創建子集?

例如:如果我想獲得的所有功率的子集,包括a從實例列表,則輸出將是:

[a,b], [a,c], [a,d], [a,b,c], [a,b,d], [a,c,d] without the empty and single subset([a]) 

同樣的,如果我想爲b,則輸出將是:

[b,a], [b,c], [b,d], [b,a,c], [b,a,d], [b,c,d] without the empty and single subset([b]) 

由於示例列表中的所有項都是字符串,因此當子集過於豐富時,它們可能會成爲內存問題。因爲我需要一次將這些子集保存在一個字符串的內存中。就像爲a製作子集時一樣,那麼我需要這些子集進行一些進一步處理,然後刪除它們,然後爲b等等。因此,我還需要關於這種情況下優化解決方案的幫助?

我需要Java的幫助。由於我對Java並不擅長,如果我犯了錯誤,請原諒我!

+0

添加了'homework'標籤,因爲我已經看到了非常相似,這幾個問題最近,你是一個新的用戶,並且任何人都不需要編寫在真實世界中做到這一點的代碼 – Bohemian

回答

1

如果總是隻有一個特定的元素,我會建議像從目標元素中移除目標元素,在剩餘的集合上使用Guava的Sets.powerSet,然後將目標元素添加到返回的集合中。喜歡的東西...

Set<String> elems = Sets.newHashSet(set); 
elems.remove(target); 
Set<Set<String>> powerSet = Sets.powerSet(elems); 
Collection<Set<String>> subsetsWithTarget = Collections2.transform(
    powerSet, new Function<Set<String>, Set<String>>() { 
    public Set<String> apply(Set<String> setWithoutTarget) { 
    return Sets.union(setWithoutTarget, Collections.singleton(target)); 
    } 
}); 

(披露:我貢獻番石榴)

相關問題