博客
关于我
Shortest Prefixes(trie树唯一标识)
阅读量:621 次
发布时间:2019-03-13

本文共 1270 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要找到每个给定单词的最短前缀,这个前缀必须唯一地标识该单词。也就是说,这个前缀应该是这个单词的最短开始部分,使得没有其他单词在输入集中以这个前缀开始。

方法思路

  • 读取输入:首先,我们读取所有输入的单词,并将它们存储在一个列表中。
  • 构建前缀哈希表:使用一个字典来记录每个前缀及其对应的单词数量。键是前缀,值是一个列表,包含所有以该前缀开头的单词。
  • 处理每个单词:对于每个单词,生成其所有可能的前缀,从最长到最短(即从长度为n到1)。检查每个前缀是否在哈希表中对应的单词数量为1。如果满足条件,那么这个前缀就是该单词的最短前缀。
  • 解决代码

    import sysfrom collections import defaultdictdef main():    words = []    for line in sys.stdin:        line = line.strip()        if line:            words.append(line)        # Build prefix map    prefix_map = defaultdict(list)    for word in words:        for i in range(len(word)):            prefix = word[:i+1]            prefix_map[prefix].append(word)        # Process each word to find the minimal prefix    for word in words:        found = False        for i in range(len(word)-1, -1, -1):            prefix = word[:i+1]            if len(prefix_map[prefix]) == 1:                print(f"{word} {prefix}")                found = True                break        if not found:            print(f"{word} {word}")if __name__ == "__main__":    main()

    代码解释

  • 读取输入:使用sys.stdin读取输入,并将每行非空字符串添加到words列表中。
  • 构建前缀哈希表:遍历每个单词,生成其所有可能的前缀,并将这些前缀及其对应的单词添加到prefix_map字典中。
  • 处理每个单词:对于每个单词,生成其所有可能的前缀,按从长到短的顺序检查每个前缀。如果找到一个前缀在哈希表中对应的单词数量为1,则输出该前缀。否则,输出整个单词本身作为前缀。
  • 这种方法确保了我们能够高效地找到每个单词的最短前缀,并且保证了这个前缀的唯一性。

    转载地址:http://nueaz.baihongyu.com/

    你可能感兴趣的文章
    QT界面操作1:如何跟踪鼠标位置?
    查看>>
    Qt环境搭建(Visual Studio)
    查看>>
    QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)...
    查看>>
    QT样式表——url路径
    查看>>
    QT数据库(三):QSqlQuery使用
    查看>>
    QT教程5:消息框
    查看>>
    SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存
    查看>>
    pom.xml中提示web.xml is missing and <failonmissingw>...
    查看>>
    Pomelo开发中Web客户端开发API简介
    查看>>
    QT教程2:QT5的体系构架
    查看>>
    PON架构(全光网络)
    查看>>
    PoolingHttpClientConnectionManager原理剖析
    查看>>
    QT教程1:ubuntu18.04安装QT5
    查看>>
    POP-一个点击带有放大还原的动画效果
    查看>>
    POP3 协议在计算机网络中的优缺点
    查看>>
    qt批量操作同类型控件
    查看>>
    Portaudio笔记-WASAPI
    查看>>
    position:fixed失效情况
    查看>>
    Qt开发笔记:QGLWidget、QOpenGLWidget详解及区别
    查看>>
    Position属性四个值:static、fixed、absolute和relative的区别和用法
    查看>>