缩短排序列表

时间:2011-04-02 18:31:18

标签: java algorithm

假设您有一个包含服务器名称的排序列表。你想尽可能地将它们折叠起来。

示例:

abcd01c, abcd02c, abcd04c, abcd05, z1x

应该成为

abcd0[1-4]c,abcd05,z1x

最简单的算法是什么来处理这样的事情?

3 个答案:

答案 0 :(得分:3)

我会将所有字符串存储在前缀映射中,这使得String的决定非常容易,并且还允许快速迭代字符串子集。

将字符串存储为:

(0)abcd01c
(5)     2c, 
(5)     4c, 
(4)    05, 
(0)z1x

该数字是必须从前一个字符串中获取的字符数。这是电话簿等词典的常见实现,您必须存储许多类似的字符串。

Trie是一个类似的结构,注释中注意到Brian Roach

答案 1 :(得分:1)

答案 2 :(得分:1)

我对你的实际需求有点不稳定,但对此的处理方法是自定义Trie (Wikipedia Entry)

当你到达钥匙中你的下一个角色不是字母字符的点时,你就会知道你有一个前缀。在Trie中的该节点内,您可以拥有另一个映射(不指向其他Trie节点),该映射由后缀键入并包含每个映射的范围。

但是,您仍然遇到有关数据的特定规则的问题。如果您有abcd01c作为密钥,前缀是abcd还是abcd0