网站建设的风险管理,企业官方网站建设的流程,wordpress download,电子元器件网站怎么做LeetCode 208. 实现 Trie (前缀树)
题目描述
Trie#xff08;发音类似 “try”#xff09;或者说 前缀树 是一种树形数据结构#xff0c;用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景#xff0c;例如自动补全和拼写检查。 请你实现 Trie 类发音类似 “try”或者说 前缀树 是一种树形数据结构用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景例如自动补全和拼写检查。 请你实现 Trie 类 Trie() 初始化前缀树对象。 void insert(String word) 向前缀树中插入字符串 word 。 boolean search(String word) 如果字符串 word 在前缀树中返回 true即在检索之前已经插入否则返回 false 。 boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix 返回 true 否则返回 false 。 示例 输入 [“Trie”, “insert”, “search”, “search”, “startsWith”, “insert”, “search”] [[], [“apple”], [“apple”], [“app”], [“app”], [“app”], [“app”]] 输出 [null, null, true, false, true, null, true]
思路
思路类似于一个26叉树每一个节点存储的是一个字母。 插入就是沿着这个路径不断向下走或创建下一层的26叉节点仅当[i]下面一层的节点为空时创建。当且仅当遍历到单词的最后一个字符时将isEnd标志位为true。 search和startwith实际上都可以依赖于一个前缀搜索方法“searchPrefix”。在前缀搜索方法中对于给定的字符串word从前缀树一层一层向下搜索具体来说用for循环遍历wordif(node.children[prefix.charAt(i)-‘a’]!null){nodenode.children[prefix.charAt(i)-‘a’]}如果出现这个孩子节点为null则说明该前缀不存在return null search就是看返回结果是否为null该结果的isEnd标志位是否为True startwith只需要判断返回结果是否为null就好
代码
class Trie {private Trie[] children;private boolean isEnd;public Trie() {children new Trie[26];isEnd false;}public void insert(String word) {Trie node this;for (int i 0; i word.length(); i){char c word.charAt(i);int index c - a;if (node.children[index] null) {node.children[index] new Trie();}node node.children[index];// node移动到下面一层}node.isEnd true;}public boolean search(String word) {Trie node searchPrefix(word);return node ! null node.isEnd;}public boolean startsWith(String prefix) {return searchPrefix(prefix) ! null;}private Trie searchPrefix(String prefix){Trie node this;for (int i 0; i prefix.length(); i){char c prefix.charAt(i);int index c - a;if (node.children[index] null){return null;}node node.children[index];}return node;}
}/*** 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);*/