免费设置前缀

时间:2016-01-25 02:52:25

标签: python algorithm prefix information-theory prefixes

是否有标准或最佳算法使一组给定的字符串无前缀?也就是说,给定一组字符串,抛弃所有在该集合中也有(较短)前缀的字符串。

如果重要,我最终会在Python 2.7中实现它。

2 个答案:

答案 0 :(得分:5)

strings = ['a', 'apple', 'b', 'beta', 'c', 'd']

def prefices_only(strlist):
    ordered = sorted(strlist)
    last = ordered[0]
    results = [last]

    for c in ordered:
        if not c.startswith(last):
            last = c
            results.append(c)

    return results

print(prefices_only(strings))

答案 1 :(得分:3)

[编辑:放弃拥有的字符串(不是 )前缀的字符串]

  1. 按递增的长度顺序对字符串进行排序。
  2. 将每个字符串插入trie。如果插入一个字符会为当前无子节点(即叶子)节点创建一个新的子节点,则丢弃当前字符串 - 它有一个前缀。
  3. [编辑:固定时间复杂度]

    第一步需要O(n log n)时间来对n个字符串进行排序。如果平均字符串长度超过log(n),那么这个时间复杂度由第二步支配,这使得所有输入字符串的总大小中的时间(和空间)成线性。它也很容易实现。