2013-08-24 79 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函数。

任何建议我让它在特定的时间运行? :\

回答

相关问题