10-4 字典树的前缀查询
前缀查询:查询字典树中是否存在以指定字符串为前缀的单词!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | mport java.util.TreeMap; public class Trie { private class Node{ public boolean isWord; public TreeMap<Character, Node> next; public Node( boolean isWord){ this .isWord = isWord; next = new TreeMap<>(); } public Node(){ this ( false ); } } private Node root; private int size; public Trie(){ root = new Node(); size = 0 ; } // 获得Trie中存储的单词数量 public int getSize(){ return size; } // 向Trie中添加一个新的单词word public void add(String word){ Node cur = root; for ( int i = 0 ; i < word.length() ; i ++){ char c = word.charAt(i); if (cur.next.get(c) == null ) cur.next.put(c, new Node()); cur = cur.next.get(c); } if (!cur.isWord){ cur.isWord = true ; size ++; } } // 查询单词word是否在Trie中 public boolean contains(String word){ Node cur = root; for ( int i = 0 ; i < word.length() ; i ++){ char c = word.charAt(i); if (cur.next.get(c) == null ) return false ; cur = cur.next.get(c); } return cur.isWord; } // 查询是否在Trie中有单词以prefix为前缀 // 前缀:一个单词的前若干个字母组成的串称为这个单词的一个前缀,整合单词也是这个单词本身的一个前缀 // 前缀查询和contains查询逻辑相似 public boolean isPrefix(String prefix){ Node cur = root; for ( int i = 0 ; i < prefix.length() ; i ++){ char c = prefix.charAt(i); if (cur.next.get(c) == null ) return false ; cur = cur.next.get(c); } return true ; } } |
本文来自博客园,作者:秋风扫落木,转载请注明原文链接:https://www.cnblogs.com/lpzh/p/12552105.html
分类:
数据结构与算法(java)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· DeepSeek智能编程
· 精选4款基于.NET开源、功能强大的通讯调试工具
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?