文章目录

  • 题目描述
  • 思路 & 代码
    • 更新版

题目描述

  • 属于那种,敲过一遍就不会忘了的那种题,就是学一个新的数据结构= =
  • 二十六叉树!

思路 & 代码

  • isEnd 非常重要噢,只有正式 insert 了的单词才能被 search 到。
  • 在 Trie 中实现内部类 TrieNode
  • 说实话,insert、search、startWith 三个函数的结构都十分相似= =
  • 注意 new Node 的时候小心。。引用丢失就难受了
class Trie {private class TrieNode{boolean isEnd;TrieNode[] next;TrieNode(){isEnd = false;next = new TrieNode[26];}}private TrieNode root;/** Initialize your data structure here. */public Trie() {root = new TrieNode();}/** Inserts a word into the trie. */// 没则插,结尾改 true (出现了,但是没真正 insert 的话,不算:比如 insert apple , 然后 search app = falsepublic void insert(String word) {char[] wordC = word.toCharArray();TrieNode nowNode = root;for(int i = 0; i < wordC.length; i++){// error:TrieNode nextNode = nowNode.next[wordC[i] - 'a']; nextNode = new TrieNode()// 会直接丢失引用!int index = wordC[i] - 'a';if(nowNode.next[index] == null){nowNode.next[index] = new TrieNode();}nowNode = nowNode.next[index];}// 结束,标志单词结尾字符nowNode.isEnd = true;}/** Returns if the word is in the trie. */public boolean search(String word) {char[] wordC = word.toCharArray();TrieNode nowNode = root;for(int i = 0; i < wordC.length; i++){int index = wordC[i] - 'a';if(nowNode.next[index] == null){return false;}nowNode = nowNode.next[index];}return nowNode.isEnd;}/** Returns if there is any word in the trie that starts with the given prefix. */public boolean startsWith(String prefix) {char[] wordC = prefix.toCharArray();TrieNode nowNode = root;for(int i = 0; i < wordC.length; i++){int index = wordC[i] - 'a';if(nowNode.next[index] == null){return false;}nowNode = nowNode.next[index];}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);*/

更新版

  • 其实三个函数的代码都差不多= =
  • 前缀树:存储字符串的一种树结构(二十六叉树),可以实现拼写检查自动补全功能。
class Trie {TrieNode root;private class TrieNode {boolean isEnd;TrieNode[] nextNode;public TrieNode() {isEnd = false;nextNode = new TrieNode[26];}}public Trie() {root = new TrieNode();}public void insert(String word) {TrieNode nowNode = root;for(char c : word.toCharArray()) {int index = c - 'a';if(nowNode.nextNode[index] == null) {nowNode.nextNode[index] = new TrieNode();}nowNode = nowNode.nextNode[index];}nowNode.isEnd = true;}public boolean search(String word) {TrieNode nowNode = root;for(char c : word.toCharArray()) {int index = c - 'a';if(nowNode.nextNode[index] == null) {return false;}nowNode = nowNode.nextNode[index];}return nowNode.isEnd;}public boolean startsWith(String prefix) {TrieNode nowNode = root;for(char c : prefix.toCharArray()) {int index = c - 'a';if(nowNode.nextNode[index] == null) {return false;}nowNode = nowNode.nextNode[index];}return true;}
}

【LeetCode笔记】208. 实现Trie(前缀树)(Java、前缀树)相关推荐

  1. 【LeetCode笔记】337. 打家劫舍III(Java、树型动态规划)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 这年头当个小偷,都得会 dp 和二叉树了 和前面的 I & II 有点不同,这次直接换了数据结构,写树来了.(之后不会是图吧) 很 ...

  2. 【LeetCode笔记】415. 字符串相加(Java、字符串)

    题目描述 不能直接把字符串转换成整数(会溢出) 面试被问过,今天刷面经又刷到..那就索性水一篇文吧! 更新:原题就是 leetcode 415 思路 & 代码 只要理好字符串s.字符串t.答案 ...

  3. 【LeetCode笔记】253. 会议室 II(Java、偏数学)

    文章目录 题目描述 思路 && 代码 计划里 hot 100 + 剑指Offer 的题目中唯一一道会员题,同时也是最后一道没写的题,刚好今天 leetcode 发了一天会员可以写上-简 ...

  4. 【LeetCode笔记】162. 寻找峰值(Java、二分、偏数学)

    文章目录 题目描述 思路 && 代码 1. 暴力法 O(n) 2. 二分法 O(logN) 二刷 打卡第十七天- 题目描述 难点在于 logN 复杂度 思路 && 代码 ...

  5. 【LeetCode笔记】221. 最大正方形(Java、动态规划、思路题)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 显而易见地可以用dp来写,问题在于如何考虑状态转移方程 思路 & 代码 首先再加一层外墙,就不用边界判断了 maxSqure[i] ...

  6. 【LeetCode笔记】617. 合并二叉树(Java、DFS、二叉树)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 貌似是面试高频题,显而易见的递归. 思路 & 代码 合并两棵树,先不考虑特殊情况,可以理解成:根结点合并,然后各自的左右子树继续进 ...

  7. 【LeetCode笔记】312. 戳气球(Java、动态规划)

    文章目录 题目描述 思路 && 代码 二刷 题目描述 一眼动态规划,但思路确实不好想 面试被问过,直接人没了= = 思路 && 代码 核心思路:关心[最后一个被爆的气球 ...

  8. 【LeetCode笔记】85. 最大矩形(Java、单调栈)

    文章目录 题目描述 思路 && 代码 二刷 题目描述 其实是84. 柱状图中最大的矩形的兄弟题目,理解成多个84题,对结果取max即可. 思路 && 代码 一行抽象出一 ...

  9. 【LeetCode笔记】621. 任务调度器(Java、桶)

    文章目录 题目描述 代码 && 思路 1. 直白的 ac 做法 O(n).O(n) 2. 桶排思想的做法 O(n).O(n) 二刷 打卡第十六天- 题目描述 有点阅读题的意思,可以结合 ...

  10. 【LeetCode笔记】494. 目标和(Java、动态规划、背包问题、滚动数组)

    文章目录 题目描述 思路 && 代码 1. 动态规划 O(n2n^2n2).O(n2n^2n2)(最方便理解,初版) 2. 转换成 01 背包问题 O(n2n^2n2).O(nnn) ...

最新文章

  1. 【每日一算法】两数相加
  2. 数组方法深入扩展(遍历forEach,filter,reduce等)
  3. 一个网页菜单的CSS代码分析
  4. Spark2.0流式处理读Kafka并写ES
  5. python交互式shell_交互式 shell 玩转 Python
  6. selenium框架安装及webdriver安装
  7. LeetCode MySQL 626. 换座位
  8. SQL与C#结合完整修改 删除信息
  9. python扫雷脚本_Python自动扫雷实现方法
  10. Xmind模板文档分享——商务模板(2)
  11. PCA+SVM进行人脸识别(ORL人脸数据集分类)
  12. excel2007加载宏的两种方法
  13. 双频wifi是什么意思 双频wifi好处有哪些
  14. 程序员写在猝死的前一天
  15. mysql教程pdf_mysql使用教程指南.pdf
  16. 根据时间进行视频的裁剪
  17. BIOS Setup设置方法
  18. 解决jupyter notebook无法跳转浏览器
  19. 位移运算(左移,右移)
  20. 安全多方计算技术介绍

热门文章

  1. android okhttpclient设置编码,Android之okhttp实现socket通讯(非原创)
  2. python 结尾回车_理解不了Python正则表达式?我帮你搞定
  3. 公众号 接收规则 消息_微信公众平台 发送模板消息(Java接口开发)
  4. pythongui管理系统项目_Python实现GUI学生信息管理系统
  5. moment 时间戳_【通知】2020 CATTI 考试准考证打印时间
  6. python自动拨号_Python自动连接ssh的方法
  7. Effective Java~34. 用enum 代替 int 常量
  8. ProcessBuilder执行bash脚本
  9. php2twig,symfony2 twig模板引擎,symfony2twig模板_PHP教程
  10. oracle sequence 不同 会话 不连续_序列 Sequence