package jjd;
import java.util.TreeMap;
public class Trie {
public class Node {
private boolean isWord;
private TreeMap<Character, Node> next;
public Node(boolean isWord) {
this.isWord = isWord;
next = new TreeMap<>();
}
public Node() {
this.isWord = false;
next = new TreeMap<>();
}
}
private Node root;
private int size;
public Trie() {
root = new Node();
size = 0;
}
public int getSize() {
return size;
}
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++;
}
}
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;
}
public boolean prefix(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 true;
}
public boolean search(String word) {
return match(root,word,0);
}
private boolean match(Node node, String word, int index) {
if(index==word.length())return node.isWord;
char c=word.charAt(index);
if(c!='.') {
if(node.next.get(c)==null) {
return false;
}
return match(node.next.get(c),word,index+1);
}else {
for(char nextChar:node.next.keySet()) {
if(match(node.next.get(nextChar),word,index+1))
return true;
}
return false;
}
}
}
字典树的插入、查询、前缀查询、模糊查询
猜你喜欢
转载自blog.csdn.net/lanshan1111/article/details/85060579
今日推荐
周排行