package com.interview.basics.model.trie; import java.io.*; import java.util.HashMap; import java.util.Map; /** * Created with IntelliJ IDEA. * User: stefanie * Date: 7/21/14 * Time: 4:52 PM */ class ChineseTrieNode{ Map<Character, ChineseTrieNode> children = new HashMap<Character, ChineseTrieNode>(); boolean isWord = false; ChineseTrieNode(boolean isWord){ this.isWord = isWord; } } public class ChineseTrie { ChineseTrieNode root = new ChineseTrieNode(false); public ChineseTrie(String path) throws IOException { FileInputStream f = new FileInputStream(path); BufferedReader dr=new BufferedReader(new InputStreamReader(f, "UTF-8")); String line = dr.readLine(); while(line != null) { addAWord(line.trim()); line = dr.readLine(); } } private void addAWord(String word){ ChineseTrieNode current = root; for(int i = 0; i < word.length(); i++){ ChineseTrieNode node = current.children.get(word.charAt(i)); if(node == null) { node = new ChineseTrieNode(false); current.children.put(word.charAt(i), node); } if(i == word.length() - 1) node.isWord = true; current = node; } } public boolean isWord(String word){ if(word.length() == 0) return false; ChineseTrieNode node = root; for(char ch : word.toCharArray()){ node = node.children.get(ch); if(node == null) return false; } return node.isWord; } public boolean partialMatch(String word, boolean partial){ if(word.length() == 0) return false; ChineseTrieNode node = root; for(char ch : word.toCharArray()){ node = node.children.get(ch); if(node == null) return false; } return partial || node.isWord; } }