如何查找字符串列表中的所有前缀并对其进行排序?

How to find and rank all prefixes in a list of strings?

我有一个字符串列表,我想找到流行的前缀。前缀的特殊之处在于它们在输入列表中作为字符串出现。

我在这里发现了一个类似的问题,但答案是为了找到一个最常见的前缀: Find *most* common prefix of strings - a better way?

虽然我的问题很相似,但不同之处在于我需要找到所有流行的前缀。或者简单地说,将前缀从最常见到最不常见排列。

例如,考虑以下字符串列表: 在,印度,印第安人,印度国旗,公牛,恶霸,废话

前缀排名: 在 - 4 次 印度 - 3次 公牛 - 3次 ...等等。请注意 - in、bull、india 都出现在输入列表中。

以下是无效的前缀: 工业 卜 布尔 ...因为它们没有出现在输入列表中。

我应该查看什么数据结构来为我的解决方案建模?我倾向于在每个节点上使用带有计数器的 "trie" 来跟踪在创建 trie 期间该节点被触及的次数。

欢迎所有建议。 谢谢

p.s。 - 我喜欢 python,如果有人可以 post 一个可以让我入门的快速片段,我会很高兴。

words = [ "in", "india", "indian", "indian", "flag", "bull", "bully", "bullshit"]

Result = sorted([ (sum([ w.startswith(prefix) for w in words ]) , prefix )  for prefix in words])[::-1]

它遍历每个单词作为前缀并检查有多少其他单词以它开头,然后对结果进行排序。 [::-1] 只是颠倒了顺序

如果我们知道前缀的长度(比如 3)

from nltk import FreqDist
suffixDist=FreqDist()
for word in vocabulary:
    suffixDist[word[-3:]] +=1
commonSuffix=[suffix for (suffix,count) in suffixDist.most_common(150) ]
print(commonSuffix)