我想知道根据前缀列表(任意长度)对字符串数组进行分组的最佳方法是什么。 例如,如果我们有这个:
prefixes = ['GENERAL', 'COMMON', 'HY-PHE-NATED', 'UNDERSCORED_']
然后
tasks = ['COMMONA', 'COMMONB', 'GENERALA', 'HY-PHE-NATEDA', 'UNDERESCORED_A', 'HY-PHE-NATEDB']
应按此方式分组:
[['GENERALA'], ['COMMONA', 'COMMONB'], ['HY-PHE-NATEDA', 'HY-PHE-NATEDB'], ['UNDERESCORED_A'] ]
天真的方法是遍历所有任务和内部循环通过前缀(反之亦然),并测试每个前缀的每个任务。
可以给我一个如何以更有效的方式做到这一点的提示吗?
答案 0 :(得分:1)
有几个选项,但您可能有兴趣研究trie数据结构。 http://en.wikipedia.org/wiki/Trie
trie数据结构易于理解和实现,适用于此类问题。如果您发现这适用于您的情况,您还可以查看Patricia Tries,它实现了类似的性能特征,但通常具有更好的内存利用率。他们更多地参与实施,但不是过于复杂。
答案 1 :(得分:1)
当然,这取决于你的问题的大小,但如果你对你的前缀和任务进行排序然后通过遍历两个排序列表来构建你的子数组,你的天真方法应该没问题。