擅长:python、mysql、java
<p>找到有特定前缀的事物的一个好方法是<a href="http://en.wikipedia.org/wiki/Trie" rel="nofollow">trie</a>。我使用了一个名为<a href="https://pypi.python.org/pypi/PyTrie" rel="nofollow">pytrie</a>的实现,但它们的工作方式基本相同。唯一有趣的一点是,你仍然需要用另一种方式生成所有前缀,因为向trie请求“foo峎a的所有前缀”只会给你“foo峎a”和它的所有前缀字符串,它们是数据的一部分,但你似乎关心“foo峎”,尽管它不是自己的键。但是,它可以用另一种方式来实现,它告诉您所有以给定前缀开头的键,即使它没有显式地存储。在</p>
<p>除此之外,一切都相当简单。包括进口,共有五行:</p>
<pre><code>from pytrie import StringTrie as trie
data = trie.fromkeys(['foo_a','foo_b','foo_c','fnord'])
PCT = 0.70
prefixes = (k[:i] for k in data for i,_ in enumerate(k, start=1))
print(max(filter(lambda x: len(data.keys(x)) >= PCT * len(data), prefixes), key=len))
</code></pre>
<p>打印<code>foo_</code>。在</p>