package com.spr.game;
import gnu.trove.map.hash.TCharObjectHashMap;
/**
* @ClassName: WordTrie
* @Description 字典树
* @Author springhao123
* @Date 2019/7/24 15:45
* Version 1.0
**/
public class WordTrie {
/**
* 配置文件没办法跑的字段
*/
public final static String[] configStrs = {"#NAME?"};
/**
* 节点信息
*/
public class WordTrieNode {
/**
* 节点的map信息
*/
private TCharObjectHashMap childNode;
/**
* 是否到词的结尾
*/
public boolean worldEnd;
public WordTrieNode() {
childNode = new TCharObjectHashMap();
worldEnd = false;
}
}
/**
* 根节点信息
*/
private WordTrieNode root;
public WordTrie() {
root = new WordTrieNode();
root.worldEnd = false;
}
/**
* 单例的信息
*/
private static WordTrie wordTrie;
/**
* 获取 字典树 单例
*
* @return
*/
public static WordTrie instance() {
return wordTrie;
}
static {
wordTrie = new WordTrie();
}
/**
* 初始化数据
*/
public void initData() {
}
/**
* 插入一个词信息
*
* @param word
*/
public void insert(String word) {
WordTrieNode node = root;
char c;
for (int i = 0; i < word.length(); i++) {
c = word.charAt(i);
if (!node.childNode.containsKey(c)) {
node = (WordTrieNode) node.childNode.put(c, new WordTrieNode());
} else {
node = (WordTrieNode) node.childNode.get(c);
}
}
node.worldEnd = true;
}
/**
* 查找这个词是不是 在屏蔽字库
*
* @param word
* @return
*/
public boolean search(String word) {
WordTrieNode node = root;
boolean found = true;
char c;
for (int i = 0; i < word.length(); i++) {
c = word.charAt(i);
if (!node.childNode.containsKey(c)) {
return false;
}
node = (WordTrieNode) node.childNode.get(c);
}
return found && node.worldEnd;
}
}