博客
关于我
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/

    你可能感兴趣的文章
    php5 apache 配置
    查看>>
    php5 升级 php7 版本遇到的问题处理方法总结
    查看>>
    PHP5.3.3安装Mcrypt扩展
    查看>>
    PHP5.4 + IIS + Win2008 R2 配置
    查看>>
    PHP5.4 pfsocketopen函数判断sock是否存活的bug(由memcached引起)
    查看>>
    Redis从入门到精通
    查看>>
    PHP5.6.x编译报错:Don't know how to define struct flock on this system, set --enable-opcache=no
    查看>>
    php5ts.dll 下载_php5ts.dll下载
    查看>>
    php7
    查看>>
    PHP7 新特性
    查看>>
    PHP7+MySQL5.7+Nginx1.9. on Ubuntu 14.0
    查看>>
    php7.1.6 + redis
    查看>>
    php7中使用php_memcache扩展
    查看>>
    PHP7中十个需要避免的坑
    查看>>
    php7和PHP5对比的新特性和性能优化
    查看>>
    PHP7安装pdo_mysql扩展
    查看>>
    PHP7实战开发简单CMS内容管理系统(7) 后台登录架构 用户登录校验
    查看>>
    php7,从phpExcel升级到PhpSpreadsheet
    查看>>
    PHP8.1 + ThinkPHP实战指南:高效构建现代化网站的六大技巧
    查看>>
    PHP8中match新语句的操作方法
    查看>>