假设您有一个包含服务器名称的排序列表。你想尽可能地将它们折叠起来。
示例:
abcd01c, abcd02c, abcd04c, abcd05, z1x
应该成为
abcd0[1-4]c,abcd05,z1x
最简单的算法是什么来处理这样的事情?
答案 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
?