2012-02-13 75 views
-1

我真的只需要一些方法來找到hashSet中所有字符串的最大長度(無論是一個字符串還是多個字符串) 。我想我應該首先對字符串長度進行排序,然後再遍歷它(從最長的字符串到最短的字符串,以便我可以在看到所有長度最長的字符串後停止迭代)。任何人都可以幫助我弄清楚如何最好地解決這個問題(主要是關心如何按照長度有效地對它們進行排序)?謝謝。Java - 我有一個字符串HashSet,我想以某種方式排序這些字符串的長度

+2

您描述了一個O(n log n)算法,該算法的初始實現爲O(n):只是迭代一次,記錄最長的字符串長度,然後再次獲取該長度的所有字符串兩者可以合併,但可能不會更快)。 – perelman 2012-02-13 04:46:41

+0

@佩雷爾曼:哇,這麼簡單卻很聰明。謝謝! – Tim 2012-02-13 04:50:46

回答

1

將字符串存儲在HashSet中以獲得快速查找的效率在嘗試查找最長的字符串時無助於您。你需要更新你的數據結構。

一種選擇是存儲兩個不同的數據結構 - 的琴絃組,其中用於TreeSet比較只是比較字符串的長度,加上先前的HashSet一個TreeSet<Set<String>>。您可以通過更新TreeSet中的相應集合以包含新字符串並像以前那樣將字符串插入HashSet,從而高效地向此混合數據結構中插入字符串。它還可以讓您通過查詢TreeSet的最大元素來高效查找所有最大的字符串。

希望這會有所幫助!

+0

謝謝,我正在考慮使用treeSet。雖然這在某些情況下肯定會起作用,但在我的情況下,我已經擁有包含所有字符串的散列(在我得到它時不會添加任何字符串)。因此,在這個特殊的例子中,佩雷爾曼在我的主要職位下提出的建議對我來說更有意義。不過謝謝。 – Tim 2012-02-13 04:54:43

相關問題