迭代所有最短长度字符串的算法?

时间:2016-04-27 23:50:57

标签: algorithm data-structures

我正在缩短网址,我希望为每个给定的网址使用尽可能短的字符串。每个URL都有不同的到期日期。

例如,让我们提交缩短到以下列表的网址:

a, b, c, ..., z, 0 ..., 9, aa, ab, ac, ... a9, ba

然后,说c到期,因此下一个网址应缩短为c而不是bb,因为c更短,不会被采用。

哪种数据结构有助于跟踪这一点?

3 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。您需要多个数据结构。这就是我要做的。

1)哈希表,短URL作为键,所有URL信息(完整URL,到期时间等)作为值。

2)过期URL的最小堆。这样您就可以快速获取并重用最短的URL。

3)一个字符串,用于跟踪正在使用的最长短URL。如果没有过期的URL,则可以快速生成新的URL。

4)要跟踪到期时间,以便有效地使URL过期。它可以是Date - > ShortURL形式的哈希表,带有有序键,因此您可以轻松获取下一个到期的URL。

答案 1 :(得分:1)

我会使用一个优先级队列,其比较器具有嵌套规则,第一个是空标记或者是标记,第二个是字符串。请记住,PQ会将最受欢迎的对象保留在队列之上。作为结果,您的对象应该是字符串名称和布尔标志的组合。

答案 2 :(得分:1)

我使用了2个堆。

  1. 未使用网址的最小堆,其中最小值为网址。
  2. 使用过的网址的最小堆,其中最小值是自1970年1月1日以来的秒数(长值)。
  3. 当你需要一个新的url时,从堆的顶部拉出1.当一个url到期时,从堆2中拉出url并将其插入堆1中。