NahSama
Senior Member
Code:
class WordDictionary {
TrieNode root;
public WordDictionary() {
root = new TrieNode();
}
public void addWord(String word) {
root.add(word);
}
public boolean search(String word) {
char[] ch = word.toCharArray();
return search (ch, root, 0);
}
public boolean search(char[] chars, TrieNode node, int index) {
if (index == chars.length) return node.isWord;
if (chars[index] != '.'){
return node.kids[chars[index] - 'a'] != null && search(chars, node.kids[chars[index] - 'a'], index + 1);
} else {
for (TrieNode kid : node.kids) {
if (kid != null && search(chars, kid, index+1)) return true;
}
return false;
}
}
class TrieNode {
public boolean isWord;
public TrieNode[] kids;
public TrieNode() {
this.kids = new TrieNode[26];
isWord = false;
}
public void add(String s) {
char[] chars = s.toCharArray();
TrieNode curr = this;
for (int i = 0; i < chars.length; i++) {
if (curr.kids[chars[i] - 'a'] == null) {
curr.kids[chars[i] - 'a'] = new TrieNode();
}
curr = curr.kids[chars[i] - 'a'];
}
curr.isWord = true;
}
}
}
/**
* Your WordDictionary object will be instantiated and called as such:
* WordDictionary obj = new WordDictionary();
* obj.addWord(word);
* boolean param_2 = obj.search(word);
*/