给定一个字符串L(已排序)和正整数N(N <= len(L))的列表,如何有效地将L划分为不多于N个组的长度为N的公共前缀?
示例:定义数据结构和功能如下:
type PrefixGroup struct {
Prefix string
Count int
}
func partition(L []string, N int, prefix string) []PrefixGroup
列表L可能包含数千个字符串,当使用
partition(L, 8, "")
输出可能是:
[
{"Prefix":"13", "Count":1000},
{"Prefix":"180": "Count": 10},
{"Prefix":"X": "Count": 2},
... ...
]
这意味着在L中,有1000个以“ 13”开头的字符串,10个以“ 180”开头的字符串和2个以“ X”开头的字符串。请注意,前缀的长度不是固定的。该算法的关键要求是使用公共前缀对字符串进行分区,以使组数接近但不超过N。
通过上面的结果,我可以调用partition(L, 8, "13")
进一步挖掘以“ 13”开头的L的子集:
[
{"Prefix":"131", "Count": 50},
{"Prefix":"135": "Count": 100},
{"Prefix":"136": "Count": 500},
... ...
]
这不是作业问题。我需要为手头的项目编写这样的算法。我可以说它是“蛮力的”,只是想知道是否有任何经典的/众所周知的数据结构和/或算法来实现已证明的时间/空间效率。
我已经考虑过了trie
,但想知道它是否会占用过多的内存...
您需要使用Radix trie。您可以阅读有关trie和Radix trie之间的区别。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句