2013-03-29 76 views
1

我有一個包含一些字符串的主數組。對於主數組的每個值,我想檢查子數組中出現的字符串和次數。例如,我有以下陣列:多字符串數組比較

主要輸入

mainArray = {A, B, C, P} 

Subarrays 
arrayA = {a,c,d,m,o} 
arrayB = {b,c,p,q,r} 
arrayC = {a,p,q,r,t,e,o} 
…………………………… 
…………………………… 
arrayN = {a,c,p,n,o} 

現在我要檢查,其中A,B,C和P一同出現多少次。它應該產生以下輸出:

resultArray = {{a,b,0}{a,c,2}{a,p,1}{b,c,0}{b,p,0}{c,p,2}} 

最後的步驟是,主陣列中每一個串多少次出現在子陣:

最終輸出

lastArray = A=3,B=0,C=4,P=3 

我會數千個主陣列和數千個子陣列。因此,性能是一個問題太:(

+1

太棒了!現在,你知道什麼? Java還是PHP?你知道甚麼和你嘗試過的任何語言,請與我們分享。 – Apurv

+1

PHP比Java好一點。但是,從性能的角度來看,我認爲Java可能會更好地解決這些問題? – Tweet

回答

0

讓我們留在標準的Java。分手的問題成爲步驟。

  1. 重命名這些變量。mainSet,組A ,setB等真的是數組,而不是集合,稱它們爲候選字符串,arrayA,arrayB等等。
  2. 將arrayA,arrayB等重寫到List中的項目,這樣你就可以遍歷它們。 List<String[]>,有一個新名字,我不知道你的目的,所以我可以把這個名單叫做partitionscover,在拓撲結構中打開封面的想法之後。讓我們使用分區。
  3. 將每個分區轉換爲Set<String> s,以便您可以使用Java集合框架。你將以List<Set<String>>結束。
  4. 計算mainSet的所有2元素子集的集合。順便說一句,這就是爲什麼candidateStrings作爲List更好的原因。使用Set<Set<String>>,並將其稱爲pairs
  5. 對於mainList的每個2元素子集,使用Set.containsAll來計數包含它的分區數。將計數存儲在新的Map<Set<String>, Integer>中,名爲pairCounts
  6. 你的resultSet在這裏沒有多大意義; {a, b, 0}是什麼數據結構?只需編寫一個格式爲pairCounts供人類消費的方法。
  7. 遍歷candidateStringspartitions以計算您的lastSet,這實際上應該是Map<String, Integer>,稱爲counts
  8. 寫一個方法來格式counts

現在,這可能會很慢。它會工作。您可以爲每個步驟編寫測試。一旦你寫了正確的代碼,就擔心速度。