博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Implement Trie (Prefix Tree)
阅读量:6701 次
发布时间:2019-06-25

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

Implement a trie with insert, search, and startsWith methods.

Note:

You may assume that all inputs are consist of lowercase letters a-z.

终于进军trie树,trie树也称子典树或者前缀树(prefix tree). 因为trie树是一个字母一个字母存储,避免单词存储的极大空间浪费.每次查找字符的时间复杂度为O(len(word)). 注意一点是trie的每个节点需要标志是不是一个单词的结尾.

trie既可以用数组实现,也可以用hashmap实现,数组实现则对每个节点都需要开一个26维数组('a'-'z'小写字母的情况下),不单纯是小写字母的情况则可能还要复杂.用hashmap是节省空间且便捷的措施.

代码如下:

class TrieNode(object):    def __init__(self):        """        Initialize your data structure here.        """        self.children = {}        self.hasword = False        class Trie(object):    def __init__(self):        self.root = TrieNode()    def insert(self, word):        """        Inserts a word into the trie.        :type word: str        :rtype: void        """        node = self.root        for i in word:            if not node.children.get(i):                node.children[i] = TrieNode()            node = node.children[i]        node.hasword = True            def search(self, word):        """        Returns if the word is in the trie.        :type word: str        :rtype: bool        """        node = self.root        for i in word:            if not node.children.get(i):                return False            node = node.children[i]        return node.hasword    def startsWith(self, prefix):        """        Returns if there is any word in the trie        that starts with the given prefix.        :type prefix: str        :rtype: bool        """        node = self.root        for i in prefix:            if not node.children.get(i):                return False            node = node.children[i]        return True

注意search是要判读这个单词是否在字典中的,查找前缀不需要~

转载于:https://www.cnblogs.com/sherylwang/p/5639617.html

你可能感兴趣的文章
2017 年热门编程语言排行榜,你的语言上榜没?
查看>>
poi 合并单元格、设置边框
查看>>
Hibernate延迟加载与opensessioninviewFilter
查看>>
Atitit 图像处理 调用opencv 通过java api attilax总结
查看>>
服务管理--systemctl命令
查看>>
SQLServer 维护脚本分享(09)相关文件读取
查看>>
Winscp开源的SSH|SFTP
查看>>
闪回之 回收站、Flashback Drop (table、index、trigger等)
查看>>
office-word去掉效验红色的波浪线
查看>>
Struts2之Action与配置文件
查看>>
POJ 3278 Catch That Cow(BFS,板子题)
查看>>
在Winform开发中使用FastReport创建报表
查看>>
vuejs监听苹果iphone手机键盘事件
查看>>
Spring中基于AOP的@AspectJ
查看>>
excel vba 实现跨表单(sheet) 搜索 - 显示搜索行记录搜索历史
查看>>
Dos命令下目录操作
查看>>
Unity长连接
查看>>
cocos2d-x-3.1 数据结构之Vector (coco2d-x 学习笔记六)
查看>>
将树莓派Raspberry Pi设置为无线路由器(WiFi热点AP,RTL8188CUS芯片)
查看>>
OA系统权限管理设计方案
查看>>