lint code
Description
Design a data structure that supports the following two operations: addWord(word)
and search(word)
search(word)
can search a literal word or a regular expression string containing only letters a-z
or .
.
A .
means it can represent any one letter.
这道题就是细节实现了
没想到递归的终止条件看了好久,index多了一个-1, 要注意啊
public class WordDictionary {
class TrieNode {
TrieNode[] child;
boolean isWord;
TrieNode() {
child = new TrieNode[26];
}
}
class TrieTree {
// dummy node
TrieNode root;
TrieTree() {
root = new TrieNode();
}
}
TrieTree tree = new TrieTree();
/*
* @param word: Adds a word into the data structure.
* @return: nothing
*/
public void addWord(String word) {
// write your code here
TrieNode node = tree.root;
int index;
for(int i=0;i<word.length();i++) {
index = word.charAt(i) - 'a';
// System.out.println("index: " + index);
if(node.child[index] == null) {
node.child[index] = new TrieNode();
}
node = node.child[index];
}
node.isWord = true;
}
/*
* @param word: A word could contain the dot character '.' to represent any one letter.
* @return: if the word is in the data structure.
*/
public boolean search(String word) {
// write your code here
TrieNode node = tree.root;
return search(word, 0, node);
}
// recursively find
private boolean search(String word, int index, TrieNode node) {
if(node == null) return false;
if(index == word.length()) return node.isWord;
if(word.charAt(index) == '.') {
for(int i=0;i<26;i++) {
if(search(word, index+1, node.child[i])) {
return true;
}
}
return false;
} else {
return node.child[word.charAt(index) - 'a'] != null && search(word, index+1, node.child[word.charAt(index) - 'a']);
}
}
}