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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步