2013-08-24 121 views
1

我被給了一個問題:如何查找特定範圍FAST中的字符串數量?

給定一個字符串列表和一個查詢列表:START和END,它們都是字符串。我必須找到字符串是在[START範圍

例如數量,END): 字符串列表:A, AA, AB, CD, ZS, XYZ 一個查詢列表:

A, AA 
A, CC 
AB, ZZ 
AC, CD 

輸出應該是:

1 
3 
3 
0 

我解決這個問題的方法是:同時通過字符串列表進行迭代,我通過一個插入新的字符串創建一個AVL樹。 (起初,我使用了不平衡的BST,但我得到了時間限制。)進行比較時,我使用java String中的compareTo函數。

創建AVL樹後,我運行從[開始,結束]計數的查詢。 我的方法是,

1. let v = root. 

2. if v==null -> return 0 

    else if v.value < start -> count(v.right) 

    else if v.value >= end -> count(v.left) 

    else 1 + count(v.right) + count(v.left) 

然而,我仍然有時間限制pernalty :(

因此,我通過散列到雙和,而不是使用的compareTo改變方法通過創建哈希函數,我比較哈希值代替。

但是,我仍然有時間限制!

所以,我子樹大小的值保存到每一個頂點,而不是使用次數或時間,我添加更多的條件語句,其中一些可ü選擇子樹的大小,而不是遞歸地調用count函數。

任何建議我讓它在特定的時間運行? :\

回答

相關問題