LeetCode 208.实现 Trie (前缀树) (Implement Trie (Prefix Tree))
发布日期:2021-06-29 17:12:18
浏览次数:2
分类:技术文章
本文共 3613 字,大约阅读时间需要 12 分钟。
LeetCode.jpg
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。
示例:
Trie trie = new Trie();
trie.insert("apple");
trie.search("apple"); // 返回 true trie.search("app"); // 返回 false trie.startsWith("app"); // 返回 true trie.insert("app"); trie.search("app"); // 返回 true 说明:你可以假设所有的输入都是由小写字母 a-z 构成的。
保证所有输入均为非空字符串。 在真实的面试中遇到过这道题?Python3 实现
# @author:leacoder # @des: 实现 Trie (前缀树)class Trie: def __init__(self): """ Initialize your data structure here. """ self.root = {} self.endofword = "end" def insert(self, word: str) -> None: """ Inserts a word into the trie. """ node = self.root for char in word: # dict.setdefault(key, default=None) 如果 key 在 字典中,返回对应的值。 # 如果不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None。 node = node.setdefault(char,{}) node[self.endofword] = self.endofword def search(self, word: str) -> bool: """ Returns if the word is in the trie. """ node = self.root for char in word: if char not in node: return False #node = node[char] node = node.get(char) return self.endofword in node def startsWith(self, prefix: str) -> bool: """ Returns if there is any word in the trie that starts with the given prefix. """ node = self.root for char in prefix: if char not in node: return False #node = node[char] node = node.get(char) return True
Java 实现
/* *@author:leacoder *@des: 实现 Trie (前缀树) */class Trie { public int SIZE = 26; public TrieNode root; class TrieNode { TrieNode(char c){ this.val = c; this.isWord = false; this.child = new TrieNode[SIZE]; } public char val; public boolean isWord; public TrieNode[] child ; } /** Initialize your data structure here. */ public Trie() { this.root = new TrieNode(' '); } /** Inserts a word into the trie. */ public void insert(String word) { if(word == null || word.length() == 0) return; TrieNode node = this.root; for( int i = 0; i < word.length(); i++ ){ char c = word.charAt(i); if( node.child[c - 'a'] == null){ node.child[c - 'a'] = new TrieNode(c); } node = node.child[c - 'a']; } node.isWord = true; } /** Returns if the word is in the trie. */ public boolean search(String word) { TrieNode node = this.root; for( int i = 0; i < word.length(); i++ ){ char c = word.charAt(i); if( node.child[c - 'a'] == null){ return false; } node = node.child[c - 'a']; } return node.isWord; } /** Returns if there is any word in the trie that starts with the given prefix. */ public boolean startsWith(String prefix) { TrieNode node = this.root; for( int i = 0; i < prefix.length(); i++ ){ char c = prefix.charAt(i); if( node.child[c - 'a'] == null){ return false; } node = node.child[c - 'a']; } return true; }}/** * Your Trie object will be instantiated and called as such: * Trie obj = new Trie(); * obj.insert(word); * boolean param_2 = obj.search(word); * boolean param_3 = obj.startsWith(prefix); */
GitHub链接:
知乎个人首页:简书个人首页:个人Blog:欢迎大家来一起交流学习
转载地址:https://blog.csdn.net/leacock1991/article/details/101490288 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月08日 11时51分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
netty优化策略
2019-04-29
架构师知识体系全景图
2019-04-29
guava中EventBus(事件总线)源码分析与使用
2019-04-29
程序员成神之路文章目录
2019-04-29
SASS软件的成熟度模型总结
2019-04-29
一次搞定redis使用
2019-04-29
最全架构设计实践方法论: 微服务
2019-04-29
Linux下简单几步安装AI开发环境-ROS(超有意思)
2019-04-29
linux入门--磁盘管理之分区、格式化与挂载
2019-04-29
开发必备:HTTP 及 TLS
2019-04-29
如何设计自己的第一个加密交易机器人?
2019-04-29
TKDE 2020 | 综述:基于知识图谱的推荐系统
2019-04-29
休息时间!哪些业余活动能提升开发人员的技能?
2019-04-29
事关人类生存?为什么要探寻AI系统的可解释性?
2019-04-29
安全工程师必知:常见Java漏洞有哪些?
2019-04-29
在后台的python:众多程序员无法攻克的难题
2019-04-29
国会大厦骚乱,与一家极不可靠的面部识别公司……
2019-04-29
电动汽车的“专属危险”:网络威胁问题不容小觑
2019-04-29
统治50年:为什么SQL在如今仍然很重要?
2019-04-29
测试是一场竞争,而数据每次都会获得胜利
2019-04-29